【问题标题】:Issue with variable values in C (huge numbers) [duplicate]C中的变量值问题(大量数字)[重复]
【发布时间】:2021-11-24 08:30:48
【问题描述】:

我刚开始学习 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 &lt;&lt;&lt; echo 'a'

Lines: 1775654849, Tabs: 0, Spaces: 32767

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

观察:

  • 我使用的是 Ubuntu 20.04。
  • 我用 gcc 版本 9.3.0 编译了程序。
  • 用zsh代替bash(虽然用bash也行不通,只是把大数改了一点点)

【问题讨论】:

    标签: c integer pre-increment


    【解决方案1】:

    声明:

    int c, nl, ns, nt = 0;
    

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-03-29
        • 2018-06-10
        • 2011-02-24
        • 2019-02-02
        • 1970-01-01
        • 2021-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多