C 中变量值的问题(巨大的数字)

Issue with variable values in C (huge numbers)

我刚开始学习 C,我遇到了一个计算标准输入中新行 (\n)、空格和制表符 (\t) 数量的练习。

问题是,

为什么:

#include <stdio.h>

int main(void){

    int c, nl, ns, nt = 0;

    while ((c = getchar()) != EOF) {

        if (c == '\n') {

            ++nl;

        }

        else if (c == '\t') {

            ++nt;
           
        }
        else if (c == ' ') {

            ++ns;

        }

    }

    printf("Lines: %d, Tabs: %d, Spaces: %d", nl, nt, ns);

    
    return 0;
}

根据我为程序提供数据的方式给我不同的巨大和错误数字?

使用 ./a.out 并在终端中输入“a”,然后按 Ctrl + D:

Lines: -621574383, Tabs: 0, Spaces: 32765

使用 cat input.txt | ./a.out,input.txt 包含“a”,仅此而已:

Lines: -115774576, Tabs: 0, Spaces: 32765

使用./a.out <<< echo 'a'

Lines: 1775654849, Tabs: 0, Spaces: 32767

VSCode 即使在将 0 分配给变量后,调试器也会显示巨大的数字。

观测:

声明:

int c, nl, ns, nt = 0;

仅初始化 nt。要同时初始化 nlns,您需要:

int c, nl = 0, ns = 0, nt = 0;

只有变量nt被初始化。变量 cnlns 未初始化。您可以通过在单独的行上声明它们并分别初始化为零或在每个之后添加 = 0 来避免这种情况。

How can I declare and define multiple variables in one line using C++?