C语言,while(~scanf("%d",&num)){}为什么输入任意字母之后无限循环,而不是结束循环呢?

看网上的教程,不是说如果输入有误的话,按位取反(~)之后,就会结束循环吗?... 看网上的教程,不是说如果输入有误的话,按位取反(~)之后,就会结束循环吗? 展开
 我来答
拥抱Linux
2019-03-08 · 知道合伙人教育行家
拥抱Linux
知道合伙人教育行家
采纳数:418 获赞数:2159
大学的校级奖学金,机械行业十年工作经验

向TA提问 私信TA
展开全部
问题的原因确实是while循环条件的设置不对。
具体说明如下:
首先,scanf()是C标准库stdio.h里面定义的用于获取用户输入的函数。

scanf的返回值,是已经「成功」赋值的变量个数。
也就是说,比如在「scanf("%d %d",&a,&b);」这个语句里,当用户输入「1(空格)2」时返回值是2,如果用户输入的是「1(空格) b」,那么返回值为1,如果输入的是「a(空格)b」,那么返回的是0。

所以,你上面的循环条件完全没有必要做取反(~)嘛!
也就是说当输入的值「没有成功」赋值的时候,scanf的返回值是0,再按位取反,变成了表达式的值成了-1,而只要while()括号里不是0(假),while()循环就会继续,那你这还怎么结束循环呢?只有用Ctrl + C了。

所以,直接用while(scanf())就可以了,输入正常的时候,它就继续循环,输入不正常的时候,就会结束循环。
如有帮助,烦请点采纳,谢谢!
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式