C-Printf无法输出预期结果

时间:2019-12-27 18:40:40

标签: c printf output

我是一名大学生,我正在尝试通过以下代码验证不同的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);之后,终端没有任何显示。 任何想法? (没有编译错误)

2 个答案:

答案 0 :(得分:1)

i / j3 / 0,C中的整数除以0为未定义行为,这意味着可能发生任何事情。在您的情况下,“字面上的意思”是指“ go back in time并使先前的printf不起作用,然后崩溃”(这实际上是由于缓冲的工作原理而发生的,但这只是实现细节)。

答案 1 :(得分:1)

printf("2: %d\n", i/j);i = 3时,您期望j = 0行得到什么?

您看到程序在那时中断的原因吗?

后续问题:

您希望从这些行中得到什么输出?
解释每行的原因!

printf("6: %f\n", x/y);
printf("7: x = %f\n"); 
printf("9: %f", x/2) ; 

由于您提供了答案,因此您对前两个期望的看法是错误的。

printf("6: %f\n", x/y); <-- "y" as you said is not declared, so I suppose to have a random float number.

y已被声明为 ,但尚未初始化。
除以未初始化的值,实际上会产生未知的值。
但是根据规范,这是未定义的行为,一切都会发生。


printf("7: x = %f\n"); <-- this is one other question, because the terminal gives me a random value either.

因为您没有提供进入%f插槽的参数,这是未定义的行为,并且您可能会得到鼻恶魔。