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

时间:2019-01-25 23:28:10

标签: c

我制作了一个程序,将所有给定数字中的所有整数相加,但是当我使用零作为数字时,我得到一个很大的负数,随着我继续运行该程序,它会增加...例如,给定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;
}

2 个答案:

答案 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