所在位置:论坛首页 -> 计算机科学与技术 -> 程序设计 -> [求助]scanf函数输入char字符的问题 |
在vs2008中写这样的一段代码:
int a,b;
char ch;
printf("please input two numbers:\n");
scanf("%d,%d",&a,&b);
printf_s("please select a operation symbol form ('+','-','*','/')\n");
scanf("%c",&ch);而运行时不能输入这个ch的char字符
这是为什么呢?
我们写一段程序测试一下scanf()函数.
for(int i=0;i<5;i++)
{
printf("=======第%d次开始=======\n",i+1);
scanf("%c",&ch);
printf("值为%c\n=======第%d次结束=======\n",ch,i+1);
}
分别输入1,2后,输出结果如下:
=======第1次开始=======
1
值为1
=======第1次结束=======
=======第2次开始=======
值为
=======第2次结束=======
=======第3次开始=======
2
值为2
=======第3次结束=======
=======第4次开始=======
值为
=======第4次结束=======
=======第5次开始=======
你会发现什么现象?第2次,第4次没有让你输入直接输出了,并且值为一个回车.这是为什么呢?
因为scanf只是读入一个字符,而你在输入时实际上输入的是:字符+回车(Enter),Enter产生的"\n"也在输入缓冲区中,下次调用 scanf时就会直接读到 它而不是等待你再次输入!getchar()有类似的结果。所以我们不提倡使用 scanf("%c", ...),特别是不提倡把它用在循环中。
解决的方法有三:
(1)将 scanf("%c", &ch); 修改为:
scanf(" %c", &ch); /*在%前加上一个空格*/
(2)、将 scanf("%c", &ch); 修改为:
scanf("%c%*c", &ch);
(3)、使用函数fflush,清除流:就是在每个接收字符的scanf语句前面,加上fflush(stdin);
太感谢了,不过scanf("%c%*c", &ch);中
%*c是什么意思呢?
%*c是跳过一个输入字符的意思.这个是scanf的一个语法.就是在%和格式字符之间加一个*号就可以跳过这个输入数字.比如当执行语句:scanf("%d,%*d,%d",&x,&y);时,我输入12,39,12三个数后,x的值为12,y值为12,39被跳过了.
操作选项: 评分 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖 |
|