繁体   English   中英

如果(scanf()== EOF)break,C ++中的程序不会停止;

[英]Program in C++ doesn't stop on if(scanf()==EOF)break;

我的C ++程序不会在if(scanf()==EOF)break;停止if(scanf()==EOF)break; ,下面是我的程序示意图,例如输入:

X XjhgXjhX

给出输出:

jhgjh

也就是说-它会打印除X之外的所有字符,但不会在Ctrl+Z上停止。

using namespace std;

int main()
{
    char str[100]={0},znak,forbd;
    int i=0,j=0;
    while(true)
    {
        i=0;
        j=0;

        if(scanf("%c",&forbd)==EOF)
            break;

        if(scanf("%c",&znak)==EOF)
            break;

        while(znak!='\n')
        {
            if(forbd!=znak && znak!=' ')
            {
                str[i]=znak;
                i++;
                //cout<<i<<"\n";
            }

            if(scanf("%c",&znak)==EOF)
                break;
        }

        while(j<i)
        {
            printf("%c",str[j]);
            j++;
        }
        printf("%c",'\n');
    }
    return 0;   
}

我不想使用cin ,因为阅读\\n有麻烦。

好的,我要使用iostream代替cstdio ,代码为if(cin.peek()=='\\n')break; 检测行尾,这解决了问题。

scanf从标准输入参考女巫中读取:

已知stdin不是指交互式设备,流已完全缓冲。 否则,默认情况下是否对流进行行缓冲取决于库(请参见setvbuf)。

通常,stdin是行缓冲的,您需要输入'\\ n'进行读取。

从一个相关的问题中,您可以找到针对此类字符读取案例的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM