我制作了一个程序,将所有给定数字中的所有整数相加,但是当我使用零作为数字时,我得到一个很大的负数,随着我继续运行该程序,它会增加...例如,给定123的scanf函数程序应返回6。
当我为scanf函数输入0时,我得到-402438064,然后我再次用0运行程序并得到-294000560。关于它为何如此工作的任何解释?
#include <stdio.h>
int main(void) {
int num, lnum, last_result;
printf("ENTER A NUMBER:\n");
scanf("%i", &num);
do {
lnum = num % 10;
num /= 10;
last_result += lnum;
}
while (num != 0);
printf("%i\n", last_result);
return 0;
}
答案 0 :(得分:0)
如评论中所述,last_result未初始化。为了清楚起见,如果不手动将其设置为0,则该值可以是任何值,并且将其添加到last_result是未定义的,因为该标准并不要求将声明的变量初始化为0。
#include <stdio.h>
int main(void) {
int num, lnum;
int last_result = 0; // 0-initialized on a new line to make it clear.
printf("ENTER A NUMBER:\n");
scanf("%i", &num);
do {
lnum = num % 10;
num /= 10;
last_result += lnum;
} while (num != 0);
printf("%i\n", last_result);
return 0;
}
答案 1 :(得分:0)
编译并运行:
#include <stdio.h>
int main(void)
{
int x, y, z;
printf("%d, %d, %d\n", x, y, z);
return 0;
}
我的机器上的输出:
240689618, 32766, -344466744
正如其他人所说,使用前必须初始化变量。正确配置的编译器会对此发出警告。我建议告诉编译器报告所有警告,并将警告视为错误。使用GCC,您可以使用类似的
gcc -Wall -Werror -o program program.c