0

我的 C++ 程序不会停止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

4

2 回答 2

0

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

于 2013-03-13T19:05:43.290 回答
0

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

众所周知,stdin 不是指交互式设备,流是完全缓冲的。否则,默认情况下流是行缓冲还是不缓冲取决于库(参见 setvbuf)。

通常,stdin 是行缓冲的,您需要键入 '\n' 才能读取。

从相关问题中,您可以找到此类字符阅读用例的解决方案。

于 2014-04-28T03:00:50.407 回答