![](/img/trans.png)
[英]In C, printf() without newline doesn't generate output even with signals?
[英]C - Printf doesn't output the expected result
我是一名大學生,我正在嘗試通過以下代碼驗證不同的 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
不起作用,然后崩潰”(這實際上是由於緩沖的工作方式而發生的,但這只是一個實現細節)。
你期望得到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
插槽的參數,所以這是未定義的行為,您可能會遇到 Nasal Demons。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.