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

时间:2013-03-13 18:27:19

标签: c++ windows

我在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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

scanf从stdin reference女巫读取:

  已知stdin不引用交互设备,该流是完全缓冲的。否则,它是依赖于库的,无论流是行缓冲还是默认缓冲(参见setvbuf)。

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

从相关的question中,您可以找到此类型的解决方案,使用字符阅读。