#include
int main()
{
int s;
while(1)
{
printf("请输入:");
scanf("%d",&s);
printf("%d ",s);
}
/*当给s从键盘接受字母的时候,该循环会出现不同,
原先(正常输入证书的时候)是等待你输入了s过后才
会输出结果,但现在(给s从键盘接受字母的时候)不
需要等待直接死循环下去。
我想请教各位长辈,这是什么原因导致的,怎样才能停
止自动死循环(给s从键盘接受字母的时候),并且,如
何让s从键盘上接收字母的时候,输出相同的字母*/
c语言scanf( )函数的一个问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
wangyu18672293959 2015-02-03 15:41关注scanf函数从输入流中读取一个数据,其返回值是成功输入的数目,比如说scanf("%d %c",&a,&b),当从键盘键入12 c时,scanf的返回值就是2;
当输入一个与scanf函数中格式转换符不匹配的数据时,scanf就不读取这个数据,而是继续放在输入流(本例中是stdin)中,下一次读取输入流的函数就从这个数据开始读取;
你的例子中,如果输入的是字符,那么与scanf中的格式转换符不匹配,字符放在输入流中,while循环一直进行,下一次scanf读取的还是上一次留在输入流中的字符,再一次不匹配,如此while函数一直执行,scanf并没有成功读取 整数的机会。代码改成如下,便可以避免无限循环的问题:
`
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int s;
while(1)
{
printf("请输入:");
fflush(stdin);//刷新输入流中的数据
if(scanf("%d",&s))
printf("%d ",s);
}
system("pause");
return 0;
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1