#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
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器