c语言问题:我的这段程序为什么会出现死循环

c语言问题:我的这段程序为什么会出现死循环,第1张

第一次循环运行:

初值

t=4,b=0,m=0(m并没有被赋初值,为了方便阅读,假定为0)

※while(t>=b)成立(

4

>

0

):m赋值为

t+b

=

4,x[m]为9

※if(x[m]>4)

成立(

9

>

4

):b赋值为

4(此时m为4)

第二次循环运行:

初值:

t=4,b=4,m=4

※while(t>=b)成立(

4

=

4

):m赋值为

t+b

=

8,x[m]越界,指向野地址

随后的运行状况取决于编译器,也取决于指向的野地址的内容:

1

如果是系统地址:d出非法访问对话框

2

如果是有效地址(其他程序使用中),取出其中的值参与后续运行,但是有可能造成其他程序崩溃,或者系统报错

3

如果是无效地址/垃圾地址,取出其中的值参与后续运行,运行状况和取出的值有关

这要看你输入什么了。有一个要点:scanf()的返回值是它成功读入值的个数。如果你第一次输入一个整数,那么第一个scanf函数会成功读入一个整数,它的返回值就是1,即ret的值是1。那么for循环的关系表达式:ret!=1就不成立,整个循环就不会执行,程序直接停止。如果你第一次输入了非整数,那么第一个scanf函数成功读入的值就是0,它返回0,即ret = 0。此时for循环的关系表达式:ret!=1成立,for循环才会开始迭代。如果你的程序执行的时候一直在打印,不给你输入的机会,说明你清空输入缓冲区的函数fflush没起作用,缓冲区里保存的第一次非法输入一直都在。你把 fflush(stdin); 改成: while(getchar()!='\n'); 就好了。

以上就是关于c语言问题:我的这段程序为什么会出现死循环全部的内容,包括:c语言问题:我的这段程序为什么会出现死循环、急!!c语言出现死循环,如何解决、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9451874.html

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

发表评论

登录后才能评论

评论列表(0条)

保存