[英]Reading from a redirected stdin (wordcount) - C
我有一個名為“ input.txt”的文本文件,其中包含:
test line one
test line two
final line
經過編譯並通過
$ ./a.exe < input.txt
我得到的輸出:
33 8 0
我對為什么行數不起作用感到困惑,因為當我打印出整數值時,顯示了13和10(回車/換行)。 字符數也是實際數的2。 有任何想法嗎?
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int charcount = 0, wordcount = 0, linecount = 0;
int c = getchar();
while (c != EOF){
if (c == 13){
linecount++;
c = getchar();
} else if (c >= 65 && c <= 90 || c >= 97 && c <= 122 || c == 39 && c != 13) {
while (c >= 65 && c <= 90 || c >= 97 && c <= 122 || c == 39 && c != 13){
charcount++;
c = getchar();
}
wordcount++;
} else {
charcount++;
}
c = getchar();
}
printf("%lu %lu %lu\n", charcount, wordcount, linecount);
return (0);
}
使用C處理Windows上的文本文件時,CRLF行的結尾將映射為僅'\\n'
(換行)的結尾。 並且'\\n'
是10( Control-J )而不是13( Control-M )。 這可能就是為什么您看到行數為0的原因。
您不應該像以前那樣編寫條件代碼(除非您有一位虐待狂的老師告訴您要這樣做)。 使用<ctype.h>
和isalpha()
(和c == '\\''
而不是39
)。
您可以通過在if (c == 13)
代碼中添加一條print語句( printf("^M read\\n");
)進行調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.