【发布时间】:2020-10-25 08:49:29
【问题描述】:
#include <stdio.h>
int main() {
int c, nl;
while ((c = getchar()) != EOF) {
if ( c == '\n') {
nl++;
printf("\n%d", nl);
}
}
return 0;
}
输入:
asdsndjkasndasjldk
asdsndjkasndasjldk
asdsndjkasndasjldk
asdsndjkasndasjldk
asdsndjkasndasjldk
输出: 4
代码计算输入行数,但是,当我编译和运行代码时,它显示的数字小于实际行数。
EOF 是文件结尾...
【问题讨论】:
-
所以在号码上加
1? -
nl永远不会被初始化。打开编译器警告(可能还有优化),你的编译器会告诉你这个。 -
@NateEldredge 虽然打开警告是一个非常好的主意,但这实际上不会产生 gcc 警告。但是,clang 确实如此。
-
@klutt:对我有用:godbolt.org/z/mgZz4P。与 gcc 一样,您需要
-Wall -O来获取有关未初始化变量的警告。因此,我对优化发表了评论。 -
@NateEldredge 啊,我明白了。不知道我需要
-O。我只用了-Wall -Wextra
标签: c while-loop counting