C语言 死循环 为啥 跳出不来

C语言 死循环 为啥 跳出不来,第1张

首先你要明白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 <stdio.h>

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输入函数。

哪里不懂可追问:

while(1){}是死循环,同理while(1)也是死循环

这样可能会比较好理解,for(i=0i<10i

){}

循环了10次;for(i=0i<10i

)一样循环的了10次,只是后面这个没有执行语句,

while(!ri)

ri取反为真的时候槐饥茄执行,即ri为0的时候执行

这个也是死循环,如果你要跳出循环的话

for()

{

……

……

while(1)

{

.....

if(...)break

//这里当条件铅察满足后,跳出whil循环,执行test这里的程序

.....

}

test.....

if(...)break

//同理,这里当条件满足后,跳出for循环,结束死循环,执行for外面的程序

}

这样说肢早是否能理解?

方法一、如果是VC++,山耐按Ctrl+F5运行,冲唯链程序会暂停。

方法二、将主程序改散孙下,加getchar()

int main()

{

int m,n

char x

scanf("%d%c%d",&m,&x,&n)

SUN(m,x,n)

getchar()

getchar()

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12503376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存