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

C程序一次读取一个字符,但从未达到EOF?,c,stdin,eof,C,Stdin,Eof,我正在编写一个程序,需要一次读取输入一个字符并转换该输入,并且需要能够区分行尾(\n)和stdin的结尾。不管出于什么原因,我的程序在到达最后一行后会无限循环,并且从不打印它。我想知道为什么它永远都抓不到EOF?我从底部取出了一些代码,因为它只是一大堆用大写字符替换字符的if语句。我基本上就是不明白为什么我的代码从来没有中断过 #include <stdio.h> #include <string.h> int main(void) { int MAXCHARS =

我正在编写一个程序,需要一次读取输入一个字符并转换该输入,并且需要能够区分行尾(\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;
      }
    }

  }

}
#包括
#包括
内部主(空)
{
int-MAXCHARS=79;
国际货币;
字符currline[MAXCHARS*2];
char lastline[MAXCHARS*2];
memset(currline,0158);
memset(lastline,0158);
int指针=0;
而(1)
{
curr=getchar();
如果(当前==EOF)
{
for(int i=0;i
据我所知,您的程序永远不会到达那个代码块,因为它永远不会得到EOF。对于Windows,请尝试Ctrl+Z;对于Linux,请尝试Ctrl+D


也可以看到,这个
currline==lastline
没有做你想做的事。如果要比较字符串,必须使用
strcmp
,而且EOF测试后的指针循环也不会起任何作用。指针在该点处始终为0。在我遗漏的代码中,指针增加了。但我不知道strcmp的事。谢谢<代码>指针总是
0
这似乎不正确。我能够运行该程序,它在EOF后按预期退出。你可以试试。按Ctrl+D模拟EOF