首先你要明白scanf函数的返回值机制:
scanf 函数的返回值反映的是按照指定的格式符正确读入的数据的个数。
当输入ctrl+z(即先按住ctrl键,再按z键),scanf就会返回EOF这个宏(即-1)的值,但不会终止程序后面的scanf输入函数;
如果是输入数据与指定格式不符,则会产生输入错误。遇到输入错误,scanf函数会立即终止(立即终止指程序内所有的scanf函数都终止),并返回已经成功读取的数据的个数。
所以,通过scanf函数的返回值和指定输入数据的个数(由格式符决定)的比较,可以判断数据输入是否成功。
举个简单例子吧:
int i,j;
printf("%d\n",scanf(“%d%d",&i,&j));
输入1 1,则输出2;
输入1 a,则输出1;
输入a 1,则输出0;
输入ctrl+z,则输出-1;
接下来讲讲对你程序的具体解释:
你的程序只有在输入错误时才会退出循环,比如输入a,输入逗号等等。
输入正确时只会显示right,而不会退出循环。
输入ctrl+z一次或两次,会显示wrong,也不会退出循环。
如果将程序稍稍改下,如下:
#include <stdioh>
void main()
{
int a;
while(1){
if(scanf("%d",&a)==1){//0改为了1
break;
}
else
if(scanf("%d",&a)==0){//1改为了0
printf("right\n");
}
else{
printf("wrong\n");
}
}
return 0;
}
那么,一旦输入错误,将终止后续所有的scanf循环,即scanf返回的值一直为0,然后程序就会一直输出right,陷入死循环。
如果输入ctrl+z就不会。
所有说只有输入错误时才会终止后续的所有scanf输入函数。
哪里不懂可追问:
在循环条件那加跳出的条件。
或者在循环体内用if之类的判断,如果允许跳出就用break跳出循环体。
当然另外一种办法是使用goto直接跳出来,但是这种不符合现在编程的思想,不建议使用。
你好!
ctrl+break或ctrl+c,有时要多按几下,然后结束所运行的程序保存即可。另外,建议你点击菜单工具--选项,选择环境选项卡,选中“启动程序时”“提示保存改变”,这样可以提醒你在运行前保存程序。
如有疑问,请追问。
以上就是关于C语言 死循环 为啥 跳出不来全部的内容,包括:C语言 死循环 为啥 跳出不来、怎样跳出死循环、vb程序如何退出死循环 比如说那个彩屏的代码就是死循环等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)