【发布时间】: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 <<< echo 'a':
Lines: 1775654849, Tabs: 0, Spaces: 32767
VSCode 调试器即使在将 0 分配给变量后也会显示大量数字。
观察:
- 我使用的是 Ubuntu 20.04。
- 我用 gcc 版本 9.3.0 编译了程序。
- 用zsh代替bash(虽然用bash也行不通,只是把大数改了一点点)
【问题讨论】:
标签: c integer pre-increment