当输入直接在终端中时,我的代码工作完美,但当与输入重定向(相同内容)一起使用时会创建一个无限循环。
int main()
{
int c,d;
int x=1;
while(x)
{
c=getchar();
if((c>='A')&&(c<='J'))
{
d=getchar();
if(d=='\n'||d==EOF)
{
if(c=='A')
x=0;
}
}
if(x)
{
printf("Invalid Input\n");//this keeps repeatingn
}
}
return 0;
}
最佳答案
实际上你的程序在 terminal 和 pipe
输入中循环,区别在于在 terminal getchar
block 中等待输入,但在 pipe
处你得到 EOF
。
您应该在每次 getchar
调用后检查 EOF
,以便解决循环问题,您可以这样做,
int main()
{
int c,d;
int x=1;
while(x)
{
c=getchar();
/* EOF check */
if (c == EOF)
break;
if((c>='A')&&(c<='J'))
{
d=getchar();
if(d=='\n'||d==EOF)
{
if(c=='A')
x=0;
}
}
if(x)
{
printf("Invalid Input\n");//this keeps repeatingn
}
}
return 0;
}
关于linux - 带有重定向的无限循环,但在正常输入下可以正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43168731/