首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

看看你是否精通c语言。嘿嘿解决办法

2012-03-28 
看看你是否精通c语言。。。嘿嘿最近对scanf这个函数有点晕。。。下面一题为什么当我输入:a空格b空格c空格Ctrl+Z

看看你是否精通c语言。。。嘿嘿
最近对scanf这个函数有点晕。。。

下面一题为什么当我输入: a空格b空格c空格Ctrl+Z 时无输出呢? 但是当我输入a空格b空格c空格回车,再按Ctrl+Z是就有输出呢?

C/C++ code
#include <stdio.h>int main(){    char ch,s[20];    int index=0,i;  //index为下标    while (scanf("%c",&ch)!=EOF)    {        s[index++]=ch;        getchar();    }    printf("The items are: \n");    for (i=0;i<index;i++)    {        printf("%5c",s[i]);    }    printf("\n");    return 0;}


还有一题,是我看到的别人发的帖子:
C/C++ code
#include <stdio.h>int main(){   int i ;   char a[5] ;   for(i = 0 ; i < 5 ; i++)   {       scanf("%c ",a + i) ;           }   for(i = 0 ; i < 5 ; i++)   {       printf("%c ", a[i]);   }   return 0;} 


1、为什么我输入a b c d e 再回车屏幕无显示?
2、为什么改成 scanf(" %c",a + i) ; 就可以呢?  


小弟真心不懂,求大神解释。。。

[解决办法]
ctrl+z 需要单起一行

空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符
回车也是空白字符
你输入5个字符之后的那个回车被忽略
[解决办法]
比如 scanf(" %c",&a) %c前面有个空格,以前做实训时候听老师给说的是这样写可以消除之前的输入

空格加在后面,不知道有什么效果
[解决办法]
阻塞式的方式有一个特点:只有按下回车之后才有可能检测在此之前是否有Ctrl+Z按下。还有一个特点,如果输入缓冲区中有可读的数据则不会检测 Ctrl+Z(因为有要读的数据,还不能认为到了流的末尾)。还有一点需要知道,Ctrl+Z产生的不是一个普通的ASCII码值,也就是说它产生的不是一个字符,所以不会跟其它从键盘上输入的字符一样能够存放在输入缓冲区。
Windows系统中一般采用阻塞式检查 Ctrl+Z。


--摘自 关于while(cin>>str)无法结束的问题-移动开发博客-移动开发日志-D...
[解决办法]
貌似要全部录入之后在EOF才管用
[解决办法]
Ctrl+Z这个跟编译器有关,VC6.0中比较蛋疼,在TC中你说的这种情况是可以输出的。。。

热点排行