2016-01-18 5 views
0

Я пишу программу, которая считает слова в C, я знаю, что могу сделать это просто с fscanf. Но я использую getc.C, getc/fgetc - terminal null

У меня есть файл, как это:

один два три четыре пять.

Я читаю символы во время цикла и точки прерывания, когда я достигаю терминала null.

Will c = fgetc(input); или c = getc(input); комплект c = '\0'; после One_ и после двух_ и т. Д.?

+0

Почему бы вам не попробовать это? Прочитайте по одному символу за раз и распечатайте его значение. Вы также можете прочитать, например. [это 'fgetc' и' getc' ссылка] (http://en.cppreference.com/w/c/io/fgetc). –

+0

Конечно, я попробовал. Я получаю segfault в этом цикле, потому что я получаю доступ к массиву за пределами. Я обращаюсь к массиву за пределами границ, потому что c == '\ 0' не происходит. Однако я задаю этот вопрос, потому что я не уверен в этом. –

+3

Файлы не имеют нулевого слова. – EOF

ответ

1

Когда возвращаемое значение функции, как getc() является EOF который -1, то вы достигли конца file.try этот код для подсчета слов:

#include <stdio.h> 

int WordCount(FILE *file); 

int main(void) 
{ 
    FILE *file; 
    if(fopen_s(&file,"file.txt","r")) { 
     return 1; 
    } 
    int n = WordCount(file); 
    printf("number of words is %d\n", n); 
    fclose(file); 
    return 0; 
} 

int WordCount(FILE *file) 
{ 
    bool init = 0; 
    int count = 0, c; 
    while((c = getc(file)) != EOF) 
    { 
     if(c != ' ' && c != '\n' && c != '\t') { 
      init = 1; 
     } 
     else { 
      if(init) { 
       count++; 
       init = 0; 
      } 
     } 
    } 
    if(init) 
     return (count + 1); 
    else 
     return count; 
}