簡體   English   中英

無符號 long int 使變量等於 0

[英]Unsigned long int make a variable equal to 0

我有以下代碼應該計算給定數字的階乘:

#include <stdio.h>

int main()
{
   unsigned short int n, i;
   unsigned long int fact=1;

   printf("Give n:");
   scanf("%u", &n);
   printf("\nfact=%u", fact);

   for(i = 1; i <= n; i++)
        fact = fact * i;

   printf("\n%u!=%u", n, fact);
   return 0;
}

我試圖檢查是什么問題,發現變量 fact 是 0。有人可以向我解釋為什么變量 fact 是 0,因為我已經用 1 初始化了它? 如果它有任何重要性,我在 Codeblocks 中使用 GNU GCC 編譯器。

由於您使用的是 GCC,您應該使用-Wall作為選項,它會准確地告訴您問題是什么:

prog.c: In function ‘main’:
prog.c:9:4: warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat=]
    scanf("%u", &n);
    ^

你告訴它把一個值讀入unsigned int變量,但你給了一個指向unsigned short的指針,它更小,所以它覆蓋了堆棧幀中n之后的任何內容,導致未定義的行為——在你的情況下,敗壞fact

道德:總是使用-Wall來啟用警告,並注意它們......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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