从重定向的stdin(wordcount)读取 - C

时间:2014-10-01 23:51:03

标签: c redirect stdin

我有这个名为" 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);
    }

1 个答案:

答案 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))进行调试。