Печать char файла с помощью fgetc (), оканчивающегося на «?»условное обозначение - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь распечатать символы (с помощью fgetc) в файле один за другим с циклом while.

Я использую последний редактор Atom для написания кода и компилирую с Компилятор GPP , нажав F5, и вывод отобразится в терминале xterm.

int main(int argc, char const *argv[])
{
  FILE* file = NULL;
  file = fopen("text.txt", "r+");
  int letter = 0;

  if (file != NULL)
  {
    while(letter != EOF)
    {
      letter = fgetc(file);
      printf("%c", letter);
    }

Я ожидал, что выводом будет текст в моем файле, который есть, но вв конце есть знак вопроса.После некоторых исследований я понял, что моя функция fgetc читает EOF как обычный символ и печатает его, в результате в конце появляется знак вопроса.Спасибо за вашу помощь!

1 Ответ

5 голосов
/ 08 апреля 2019

... заканчивается символом «?»

делает

while(letter != EOF)
{
  letter = fgetc(file);
  printf("%c", letter);
}

вы печатаете букву перед тем, чтобы проверить, является ли это EOF, поэтому вы (пытаетесь) напечатать EOF, который не является символом, производя неожиданный вывод

Пример правильного кода:

while ((letter = fgetc(file)) != EOF)
  putchar(letter); /* or printf("%c", letter); if you prefer */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...