[英]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.