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