我是一名大学生,我正在尝试通过以下代码验证不同的printf输出:
#include <stdio.h>
int main()
{
int i=3,j=0;
float x=5,y;
printf("1: %d\n", i);
printf("2: %d\n", i/j);
printf("3: %d\n", i*i);
printf("4: i = \n");
i=i + j;
printf("6: %f\n", x/y);
printf("7: x = %f\n");
printf("8: %d\n", i/2);
printf("9: %f", x/2) ;
return 0;
}
在执行阶段,在第一个输出printf("1: %d\n", i);
之后,终端没有任何显示。任何想法? (无编译错误)
i / j
为3 / 0
,C中的整数除以0为未定义行为,这意味着可能发生任何事情。在您的情况下,“从字面上看,所有内容”的意思是“回到过去,使先前的printf
不起作用,然后崩溃”(这实际上是由于缓冲的工作原理而发生的,但这只是实现细节)。
i/j
和i = 3
时您期望j = 0
得到什么?