第一次循环运行:
初值:
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语言出现死循环,如何解决、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)