我目前正在通过K& R for C.在第1.5节中,我们基本上创建了一个字数统计程序。代码如下,
#include <stdio.h>
#define IN 1
#define OUT 0
int main()
{
int c;
long int nl, nc, nw;
int state;
nl = nw = nc = 0;
state = OUT;
while((c = getchar())!= EOF){
++nc;
if (c == '\n'){
++nl;
}
if (c == ' '||c == '\n'|| c == '\t'){
state = OUT;
} else if (state == OUT){
state = IN;
++nw;
}
}
printf("\n%ld %ld %ld\n", nl, nc, nw);
}
当我用gcc编译这个程序并打开可执行文件并输入诸如
之类的东西时Hello
World
我得到输出
1 11 2
因为我们有1&#39; \ n&#39;换行符,11个字符(包括换行符)和2个单词。有趣的是我什么时候
vim hello.txt
并输入
Hello
World
然后发出命令
cat hello.txt|./a.out
我得到以下输出
2 12 2
为什么这个输出与之前不同,因为我所做的只是将文件流式传输到可执行文件中,所以我不明白有什么不同。请解释一下。
谢谢。
答案 0 :(得分:6)
不是你的程序功能,而是Vim的功能。请参阅:What does the noeol indicator at the bottom of a vim edit session mean?
如果保存时没有,Vim会自动在文件末尾添加换行符。
类型
:set noeol
在Vim中并再次保存文件,然后你的程序将输出11作为第二个数字。
P.S。 <{1}}使用cat something | program
是多余的,只需program < something
即可。
答案 1 :(得分:2)
将charactors键入文件并保存后,在文件末尾自动将0x0a添加到文件末尾