[英]Why is my C program printing a rubbish value?
在下面的程序中,我沒有得到正確的答案。 如果我輸入“1”作為scanf
的輸入,將打印結果-4200052
。
下面是我的代碼:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
int a = -n-4;
int square = n*n;
int b = square-7;
printf("ENTER AN INTEGER: ");
scanf ("%d" , &n);
if (n<3)
printf ("%d" , a);
else
{
if (n >= 3 || n <= 10)
printf ("%d" , b);
}
return 0;
}
我錯過了什么嗎? 任何人都可以給我指點我做錯了什么?
這是因為在初始化時您正在執行操作,但“n”沒有值。 您必須將操作“a=-n-4”放在 printf function 之前(當變量“n”具有已知值時)。 這也許可以解決你的問題,因為一開始變量“n”沒有值(垃圾值),所以“a”沒有值(垃圾值)。 正如我所說,嘗試將數學運算放在 scanf function 之后並告訴我它是否有效。
另一方面,你的“其他”的條件:
如果 (n >= 3 || n <= 10)
“n<=10”的條件沒有意義,因為所有低於 10 的值都高於 3。
BR。
如果您不自己初始化變量,在C中,它們將不會被自動初始化(除非它們是static
/ global
變量)。
當你這樣做時會發生什么:
int a
;
是不是sizeof(int)
的 memory 地址塊被保留給這個變量名,但分配的地址實際上沒有寫入任何內容......這意味着該 memory 地址中包含的任何內容都沒有“擦除”或賦予任何值。
因此,很可能已經在該地址寫入了某些內容,而您只是在讀取已經存儲在該 memory 地址的一些垃圾值。
就像從一堆剩余的雜志和報紙中選擇一張你需要的大小的紙,你會在上面寫一些東西。 也許你想在那張紙上做你的數學作業,但是如果你試着閱讀上面實際寫的東西,在你寫任何東西之前,你只會發現過時的新聞!
試驗這段代碼:
int main()
{
int n;
printf("Non-initialised n value: %d\n", n);
int a = n + 1;
printf("Value of n incremented by one: %d\n", a);
n = 4;
printf("Value of initialised n:\n", n);
return 0;
}
現在清楚了嗎? 您正在讀取n
的值,這是一個垃圾值(可能是過時的足球比賽結果? ),而您實際上是在對該垃圾值進行處理,其中: int a = -n-4;
所以,既然你知道了這一點,你也知道你可以通過確保對n
的所有操作都在n
被賦予適當的值之后執行來修復你的程序,所以......
int main()
{
int n;
printf("ENTER AN INTEGER: ");
scanf("%d", &n);
int a = -n - 4;
int square = n * n;
int b = square - 7;
if (n < 3)
printf("%d", a);
else
{
if (n >= 3 || n <= 10)
printf("%d", b);
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.