繁体   English   中英

从重定向的标准输入(wordcount)中读取-C

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM