C 为什么我的输出在相同的输入(0)下增加?
我制作了一个程序来求任意给定数的所有整数之和,但是当我使用零作为数字时,我得到一个巨大的负数,随着我继续运行程序,这个负数会增加……例如,给定scanf函数的123,程序应该返回6 当我为scanf函数输入0时,我得到-402438064,然后用0再次运行程序,得到-294000560。有没有解释为什么它是这样工作的C 为什么我的输出在相同的输入(0)下增加?,c,C,我制作了一个程序来求任意给定数的所有整数之和,但是当我使用零作为数字时,我得到一个巨大的负数,随着我继续运行程序,这个负数会增加……例如,给定scanf函数的123,程序应该返回6 当我为scanf函数输入0时,我得到-402438064,然后用0再次运行程序,得到-294000560。有没有解释为什么它是这样工作的 #include <stdio.h> int main(void) { int num, lnum, last_result; printf("ENT
#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;
}
#包括
内部主(空){
int num,lnum,最后的结果;
printf(“输入一个数字:\n”);
scanf(“%i”和&num);
做{
lnum=num%10;
num/=10;
最后的结果+=lnum;
}
而(num!=0);
printf(“%i\n”,最后的结果);
返回0;
}
如注释中所述,上次结果未初始化。要明确这一点,如果您不手动将其设置为0,则该值可以是任何值,并且将其添加到最后一个结果中是未定义的,因为标准并不坚持声明的变量是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;
}
#包括
内部主(空){
int num,lnum;
int last_result=0;//0-在新行上初始化以使其清晰。
printf(“输入一个数字:\n”);
scanf(“%i”和&num);
做{
lnum=num%10;
num/=10;
最后的结果+=lnum;
}而(num!=0);
printf(“%i\n”,最后的结果);
返回0;
}
编译并运行它:
#include <stdio.h>
int main(void)
{
int x, y, z;
printf("%d, %d, %d\n", x, y, z);
return 0;
}
正如其他人所说,在使用之前必须初始化变量。正确配置的编译器会警告您这一点。我建议告诉编译器报告所有警告并将警告视为错误。使用GCC,您可以使用
gcc -Wall -Werror -o program program.c
last_result+=lnum代码>但上次结果未初始化,因此这是未定义的行为。非常感谢这对您的帮助!非常感谢你
gcc -Wall -Werror -o program program.c