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 分配给变量后,调试器也会显示巨大的数字。
观测:
- 我正在使用 Ubuntu 20.04.
- 我用9.3.0版的gcc编译程序。
- 用zsh代替bash(虽然用bash也不行,只是稍微改了个大号)
声明:
int c, nl, ns, nt = 0;
仅初始化 nt
。要同时初始化 nl
和 ns
,您需要:
int c, nl = 0, ns = 0, nt = 0;
只有变量nt
被初始化。变量 c
、nl
和 ns
未初始化。您可以通过在单独的行上声明它们并分别初始化为零或在每个之后添加 = 0
来避免这种情况。
How can I declare and define multiple variables in one line using C++?
我刚开始学习 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.
- 我用9.3.0版的gcc编译程序。
- 用zsh代替bash(虽然用bash也不行,只是稍微改了个大号)
声明:
int c, nl, ns, nt = 0;
仅初始化 nt
。要同时初始化 nl
和 ns
,您需要:
int c, nl = 0, ns = 0, nt = 0;
只有变量nt
被初始化。变量 c
、nl
和 ns
未初始化。您可以通过在单独的行上声明它们并分别初始化为零或在每个之后添加 = 0
来避免这种情况。
How can I declare and define multiple variables in one line using C++?