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