为什么会一直输出0呀,不应该只能跳出1次内循环吗,就算后面跳出内循环也应该输出负数,这是为什么?
而且把输出语句放进内循环里面,内循环就跳不出了,而且会输出负数,为什么?
#include<stdio.h>
void main()
{
int j;
j = 138;
do
{
while (--j);
printf("%d",j);
} while (1);
}
为什么会一直输出0呀,不应该只能跳出1次内循环吗,就算后面跳出内循环也应该输出负数,这是为什么?
而且把输出语句放进内循环里面,内循环就跳不出了,而且会输出负数,为什么?
#include<stdio.h>
void main()
{
int j;
j = 138;
do
{
while (--j);
printf("%d",j);
} while (1);
}
该回答引用ChatGPT
这个程序的输出结果会一直输出负数,原因是:
当 j 减小到 0 时,再次执行 --j 时,j 的值会变成 -1,由于 -1 不等于 0,内循环会一直执行下去,直到 j 的值变成了 -2147483648,即 INT_MIN。此时再执行 --j 时,j 的值会变成 INT_MAX,即 2147483647,内循环才会退出。因此,程序的输出结果会一直输出负数,直到输出 -2147483648 后才会输出正数。
如果你把输出语句放进内循环里面,内循环就会一直执行下去,因为 j 的值不会等于 0,所以内循环不会退出,导致程序一直卡在那里输出负数。同时,由于内循环的执行次数非常多,可能会导致程序卡死或崩溃。
在内循环里添加一个判断语句,当 j 的值等于 0 时跳出内循环,或者使用 break 语句跳出内循环,以避免程序的不必要执行。同时,也不要忘记在 main 函数结束前添加 return 0; 语句,以保证程序的正常退出。
#include <stdio.h>
int main() {
int j = 138;
do {
while (--j) {
printf("%d ", j);
if (j == 0) {
break;
}
}
j = 138; // 重新赋值 j
} while (1);
return 0;
}