簡體   English   中英

為什么我的 C 程序打印垃圾值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM