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

scanf はstdin リファレンスwitch から読み込みます:

stdin は対話型デバイスを参照しないことがわかっており、ストリームは完全にバッファリングされています。それ以外の場合、ストリームがデフォルトでライン バッファリングされるかどうかはライブラリに依存します (setvbuf を参照)。

通常、stdin は行バッファリングされており、読み取るには「\n」と入力する必要があります。

相関する質問から、このタイプの文字読み取りのユース ケースの解決策を見つけることができます。

于 2014-04-28T03:00:50.407 に答える
0

わかりました、行末を検出するコードiostreamの代わりに使用します。これで問題は解決します。cstdioif(cin.peek()=='\n')break;

于 2013-03-13T19:05:43.290 に答える