簡體   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