programmer_devotion 2015-02-02 08:48 采纳率: 25%
浏览 1712
已采纳

c语言scanf( )函数的一个问题

#include
int main()
{
int s;
while(1)
{
printf("请输入:");
scanf("%d",&s);
printf("%d ",s);
}
/*当给s从键盘接受字母的时候,该循环会出现不同,
原先(正常输入证书的时候)是等待你输入了s过后才
会输出结果,但现在(给s从键盘接受字母的时候)不
需要等待直接死循环下去。
我想请教各位长辈,这是什么原因导致的,怎样才能停
止自动死循环(给s从键盘接受字母的时候),并且,如
何让s从键盘上接收字母的时候,输出相同的字母*/

  • 写回答

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;
    }

    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

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