TA的每日心情 | 慵懒 2020-8-11 08:18 |
---|
签到天数: 114 天 连续签到: 1 天 [LV.6]测试旅长
|
今天帮同学调试程序时发现一个问题
类似代码如下:(源程序太长不高兴贴了 )
#include "stdio.h"
int main(int argc,char *argv[]) {
int i;
for (i = 0; i < 5; i++) {
char c;
scanf ("%c",&c);
printf("para%d=%c\n",i,c);
printf("*********\n");
}
return 0;
}
执行结果比较奇怪
当时我的第一反应是scanf的时候由于输入完一个字符按了回车,可能接收了不止一个字符
于是改成了scanf(" %c",&c);程序可以正常执行
然后我就想
既然scanf里的第一个字符串是对格式的约定
那么能不能用scanf("%c\n",&c);呢
试了一下发觉居然不行
很郁闷的上网找了下资料
有一个解决办法是在scanf后加一句清空缓存的语句:fflush(stdin);
这样是没问题的
但是我还是想不明白
1 为什么scaf("%c\n",&c); 执行会不正常呢?
(网上查到的解释是:
“用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。这里的空白符包括空格,制表符,换行符,回车符和换页符。所以如果你用scanf("%d ",&a)也会出现同样的问题。”
那如果这样的话,我用scaf("%ca",&c);为什么还是不行。。。)
2 在console状态中按回车键,究竟是回车还是回车+换行?(文本状态下肯定是回车+换行) |
|