看看你是否精通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中你说的这种情况是可以输出的。。。