linux - 带有重定向的无限循环,但在正常输入下可以正常运行

标签 linux c

当输入直接在终端中时,我的代码工作完美,但当与输入重定向(相同内容)一起使用时会创建一个无限循环。

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;
}

最佳答案

实际上你的程序在 terminalpipe 输入中循环,区别在于在 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/

相关文章:

linux - 使用 Apache 版本 2xy 进行转发、屏蔽和别名

c - 从设备到主机的用户模式 ​​USB 同步传输

c - SysV 信号量是否在文件系统中表示?

c - 从 Debian 上运行的 C 程序查看 TCP header 字段

收集 BST 的所有叶子并列出它们

c - VS2010、flex 和 bison、重新定义和没有行号的语法错误

regex - grep 中交替使用的两个正则表达式

linux - 不安全字符串处理函数的完整列表及其更安全的 linux 替代品

Java:Apache Mina IoAcceptor 无法在 Linux 中解除绑定(bind)

c - 为什么 printk 不在内核日志中打印消息(dmesg)