C程序一次读取一个char,但从未到达EOF?

时间:2018-05-01 00:23:49

标签: c stdin eof

我正在编写一个程序,需要一次读取一个字符输入并转换该输入,我需要能够区分行的结尾(\ n)和stdin的结尾。无论出于何种原因,我的程序在到达最后一行后无限循环并且从不打印它。我想知道它为什么永远不会捕捉到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 :(得分:0)

据我所知,你的程序永远不会到达那段代码,因为它永远不会得到EOF。尝试使用Ctrl + Z for Windows或Ctrl + D for Linux。

另见https://en.wikipedia.org/wiki/End-of-fileWhat is considered as EOF in stdin?