Чтение ввода из файла в C - PullRequest
       6

Чтение ввода из файла в C

0 голосов
/ 29 января 2011

Хорошо, у меня есть файл ввода, в котором я с успехом вычисляю количество слов и символов в каждой строке.Когда я добираюсь до конца строки, используя приведенный ниже код, он выходит из цикла и читает только в первой строке.Как перейти к следующей строке ввода, чтобы продолжить программу?

РЕДАКТИРОВАТЬ: я должен анализировать каждую строку отдельно, поэтому я не могу использовать EOF

while( (c = getchar()) != '\n')

Ответы [ 4 ]

5 голосов
/ 29 января 2011

Измените '\n' на EOF. Вы читаете до конца строки, когда хотите прочитать до конца файла (EOF - это макрос в stdio.h, соответствующий символу в конце файла).

Отказ от ответственности: я не претендую на безопасность метода.

3 голосов
/ 29 января 2011

'\ n' - символ перевода строки (новая строка), поэтому цикл завершится, когда будет достигнут конец первой строки.Конец файла помечается символом конца файла (EOF).cstdio (или stdio.h), который содержит функцию getchar (), имеет определенную EOF-константу, поэтому просто измените while-строку на

while( (c = getchar()) != EOF)
0 голосов
/ 29 января 2011

Ну, символ \ n на самом деле является комбинацией двух символов, двух байтов: 13-го байта + 10-го байта.Вы можете попробовать что-то вроде

int c2=getchar(),c1;
while(1)
{
  c1=c2;
  c2=getchar();
  if(c1==EOF)
    break;
  if(c1==(char)13 && c2==(char)10)
    break;

  /*use c1 as the input character*/
}

. Это должно проверить, что два входных символа составляют правильный куплет (13,10)

0 голосов
/ 29 января 2011

Со страницы man: «читает следующий символ из потока и возвращает его в виде знака без знака, приведенного к типу int, или EOF в конце файла или ошибки» EOF - это макрос (часто -1) для возврата этой и связанных с ней функций, который указывает конец файла. Вы хотите проверить, возвращаете ли вы это. Обратите внимание, что getc возвращает целое число со знаком, но допустимыми значениями являются символы без знака, приведенные к целым числам. Что, если c - подписанный символ?

...