Программа на C читает по одному символу за раз, но никогда не достигает EOF? - PullRequest
0 голосов
/ 01 мая 2018

Я пишу программу, которая должна читать ввод по одному символу за раз и преобразовывать этот ввод, и мне нужно иметь возможность различать конец строки (\ n) и конец стандартного ввода. По какой-то причине моя программа просто бесконечно зацикливается после того, как достигает последней строки и никогда не печатает ее. Я задаюсь вопросом, почему это никогда не ловит EOF? Я вынул часть кода снизу, потому что это просто тонна операторов if, заменяющих символы заглавными буквами и тому подобное. Я просто не понимаю, почему мой код никогда не ломается.

#include <stdio.h>
#include <string.h>

int main(void)
{
  int MAXCHARS = 79;
  int curr;
  char currline[MAXCHARS*2];
  char lastline[MAXCHARS*2];

  memset(currline,0,158);
  memset(lastline,0,158);

  int pointer = 0;

  while (1)
  {
    curr = getchar();

    if (curr == EOF)
    {
      for (int i = 0; i < pointer; i++)
        {
          printf("%c", currline[i]);
        }
      break;
    }

    if (curr == '\n')
    {
      if (currline == lastline) 
      {
        pointer = 0;
      }
      else
      {
        strcpy(lastline,currline);
        for (int i = 0; i < pointer; i++)
        {
          printf("%c", currline[i]);
        }

        pointer = 0;
      }
    }

  }

}

1 Ответ

0 голосов
/ 01 мая 2018

Насколько я понимаю, ваша программа никогда не достигает этого блока кода, потому что она никогда не получает EOF. Попробуйте Ctrl + Z для Windows или Ctrl + D для Linux.

Также см. https://en.wikipedia.org/wiki/End-of-file и Что считается EOF в стандартном вводе?

...