我正在编写一个程序,需要一次读取一个字符输入并转换该输入,我需要能够区分行的结尾(\ 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;
}
}
}
}
答案 0 :(得分:0)
据我所知,你的程序永远不会到达那段代码,因为它永远不会得到EOF。尝试使用Ctrl + Z for Windows或Ctrl + D for Linux。
另见https://en.wikipedia.org/wiki/End-of-file和What is considered as EOF in stdin?