C语言,while(~scanf("%d",&num)){}为什么输入任意字母之后无限循环,而不是结束循环呢?
展开全部
问题的原因确实是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())就可以了,输入正常的时候,它就继续循环,输入不正常的时候,就会结束循环。
如有帮助,烦请点采纳,谢谢!
具体说明如下:
首先,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())就可以了,输入正常的时候,它就继续循环,输入不正常的时候,就会结束循环。
如有帮助,烦请点采纳,谢谢!
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询