C 为什么我的输出在相同的输入(0)下增加?

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

我制作了一个程序来求任意给定数的所有整数之和,但是当我使用零作为数字时,我得到一个巨大的负数,随着我继续运行程序,这个负数会增加……例如,给定scanf函数的123,程序应该返回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;
}
#包括
内部主(空){
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