繁体   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