3

。という名前のifstreamオブジェクトを含む.txtファイルを開きましたinput。新しい行が「(」で始まる場合、希望どおりに読み取られません。期待される出力が出力されないため、ループを終了します。whileループからジャンプするのは次の場合のみです。ファイルの最後に到達します。何が問題になっていますか?dowhileループと.txtファイルを以下に示します。

char c;
int i;
do
{
    if(input.peek( ) == '(' || input.peek( ) == ')')
    {
        input >> c;
        cout << c;
    }else if(input.peek( ) == '+' || input.peek( ) == '-' || input.peek( ) == '*' || input.peek( ) == '/')
    {
        input >> c;
        cout << c;
    }else
    {
        input >> i;
        cout << i;
    }

}while(input && input.peek( ) != EOF);

.txtファイルは次のとおりです。それぞれが別々の行にあります。

(3)
(3)
4
(5+7)-(5*3)

これは私の出力です:

 (3)3
4

1 に答える 1

3

input.peek()したがって、問題は、読み取られた後に改行が返されることであると確信し')'ています。次にinput >> i;、数値を読み取らず、i以前の値のままなので、出力は3です。i = 42;前に追加することで、これをすばやく試すことができますinput >> i;-出力がになる場合は(3)42、その通りです。

私が正しければ、処理するコードなどを少し追加する必要がありますisspace()

cpeek = input.peek();また、最初の前に、のようなことをしてから、などifを使用することをお勧めします。if (cpeek == '(' || cpeek == ')')...

于 2013-02-10T00:51:26.793 に答える