fgetc () не возвращает символы \ n - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь прочитать текстовый файл, используя тип FILE *.Все хорошо, кроме функции fgetc ().

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

Я использую следующий код:

char ch;
while (ch!=EOF) {
    ch = (char) fgetc(gl_file);
    if(ch=='\n') newline_counter++;
}

newline_counter остается 0.

Ответы [ 2 ]

3 голосов
/ 25 мая 2019

Вы не инициализируете ch перед проверкой его значения, и ch равно char, в то время как fgetc возвращает int. Перепишите что-нибудь вроде:

int ch;
while ((ch = fgetc(fp)) != EOF)
{
  if(ch == '\n')
    ++newline_counter;
}
0 голосов
/ 25 мая 2019

нет необходимости приводить возвращаемое значение из fgetc. используйте getc вместо fgetc:

getc() эквивалентно fgetc() за исключением того, что оно может быть реализовано как макрос, который оценивает stream более одного раза.

char ch = getc(fp);
do{
   if (ch == '\n') ++newline_counter;
} while ((ch = getc(fp)) != EOF);

или вы можете использовать getline():

getline() читает всю строку из stream .

char *ch = NULL;
size_t len = 0;
while (getline(&ch, &len, file) != -1)
    ++line;

Если для *ch установлено значение NULL, а для *len установлено значение 0 перед вызовом, то getline() выделит буфер для хранения линии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...