我有这个名为" input.txt"的文本文件。其中包含:
test line one
test line two
final line
编译并通过
运行$ ./a.exe < input.txt
我得到了输出:
33 8 0
我很困惑,为什么行计数不起作用,因为我打印出整数值,显示13和10(回车/换行)。 charcount也是实际数量的两个。有什么想法吗?
#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);
}
答案 0 :(得分:0)
当在C中处理Windows上的文本文件时,CRLF行结尾仅映射到'\n'
(换行符)结尾。并且'\n'
是10( Control-J )而不是13( Control-M )。这可能就是为什么你的行数会看到0的原因。
你不应该像你一样对条件进行编码(除非你有一个虐待老师告诉你这样做)。使用<ctype.h>
和isalpha()
(以及c == '\''
代替39
)。
您可以通过在printf("^M read\n");
代码中添加打印声明(if (c == 13)
)进行调试。