| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 539 人关注过本帖
标题:关于scanf的返回值与while的死循环
只看楼主 加入收藏
wqwqyt123
Rank: 2
等 级:论坛游民
帖 子:30
专家分:52
注 册:2015-1-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
关于scanf的返回值与while的死循环
自己乱写的函数


#include<stdio.h>
int main()
{
    int num;
    while(scanf("%d",&num)!=1)
    {
        printf("haha\n");
    }
}

上面的函数会死循环

#include<stdio.h>
int main()
{
    int num;
    char b[50];
    while(scanf("%d",&num)!=1)
    {
        gets(b);                                  //加了这个却不会了
        printf("haha\n");
    }
}

这是为什么呢???求解
2015-02-25 13:26
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:20 
scanf("%d",&num)
如果成功从键盘输入读取到一个INT类型的值到num
则返回值为1
在你举的第1个例子里
假如你输入了一个非INT值
!=1 就一直成立
相当于while(1) ....
条件永为真 就是死循环了
当然如果你入的是INT类型的值
第一次循环时就会退出了

第2个例子里
由于加入了gets(b)
程序会要求你输入一个非INT值后
再将一个字符串写入到b[50]
需要注意的是 你定义的这个数组实在太小
这样在执行gets事件时
很容易会导致数组越界
不推荐这样的写法
这个gets语句会“吃”掉scanf留在缓冲区里的所有输入
然后再执行printf语句进入到下一次循环
也就是再次执行scanf语句
这就是等待重新的条件判断 而不是死循环

Only the Code Tells the Truth             K.I.S.S
2015-02-25 13:53
快速回复:关于scanf的返回值与while的死循环
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012221 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved