2014-10-01 4 views
0

Я этот текстовый файл под названием «input.txt», который содержит:Чтение из перенаправлены стандартного ввода (WordCount) - C

test line one 
test line two 
final line 

После компиляции и запуска с помощью

$ ./a.exe < input.txt 

Я получаю выход :

33 8 0 

Я запутался, почему количество строк не работает, как при печати из целочисленных значений, 13 и 10 (в отставке перевозки urn/line feed). Также 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

Не забывайте, что символы новой строки также являются символами. Стандартная программа 'wc', безусловно, учитывает их; ваш код, вероятно, тоже. В Unix ваш файл имеет две строки с 13 символами и один с 10, плюс 3 строки новой строки, в общей сложности 39 символов; в Windows текстовый файл также будет содержать 39 символов, хотя на диске или в файле будет 42 символа, если он рассматривается как двоичный файл. –

ответ

0

Когда текстовый файл на Windows, обрабатывается в C, концовки CRLF строки отображаются в '\n' (символ новой строки) только окончаний. И '\n' - 10 (Control-J), а не 13 (Control-M). Вероятно, поэтому вы видите 0 для подсчета строк.

Вы не должны кодировать условия, как вы это делали (если у вас нет садистского учителя, который говорит вам сделать это так). Используйте <ctype.h> и isalpha()c == '\'' вместо 39).

Вы можете отладить, добавив инструкцию печати (printf("^M read\n");) в код if (c == 13).

Смежные вопросы