2

だから私は次のコードを持っています:

char command;
cin >> command;
if ( command == 'P' ) {
    do_something();
}
if ( command == 'Q' ) {
    cout << "Exit\n";
    exit(0);
}
else {
    cout << "command= " command << endl; //use for debugging
    cout << "Non-valid input\n";
    exit(1);
}
cout << "exit at completion\n";
exit(0);
}

の入力を使用すると、終了P後の出力は次のようになります。do_something()

"output from do_something() function"
command= P
Non-valid input

私の質問は、最初の if ステートメントで呼び出されたNon-valid input後もまだ取得するのはなぜですか? do_something()AKA が終了しても、else がまだ実行されるのはなぜdo_something()ですか?

4

3 に答える 3

5

else2 番目の の前を省略しましたif。これは、if command != 'Q'(これは に当てはまりますP) の場合、exitブロックが実行されることを意味します。

あなたはおそらくそうするつもりでした

if ( command == 'P' ) {
    do_something();
}
else if ( command == 'Q' ) { // Note the 'else'
    cout << "Exit\n";
    exit(0);
}
else {
    cout << "command= " command << endl; //use for debugging
    cout << "Non-valid input\n";
    exit(1);
}

そうすれば、コマンドが のときにPdo_something呼び出され、残りはすべてスキップされます。

于 2012-10-23T18:30:04.657 に答える
1

あなたは最初のものではなく2番目elseのものに関連付けられています。したがって、最初に終了した後、それは2番目の部分に入ります。それがあなたがこれを手に入れている理由です。これを使用する必要があります ififelse

char command;
cin >> command;
if ( command == 'P' ) {
    do_something();
}
else if ( command == 'Q' ) {
    cout << "Exit\n";
    exit(0);
}
else {
    cout << "command= " command << endl; //use for debugging
    cout << "Non-valid input\n";
    exit(1);
}
cout << "exit at completion\n";
exit(0);
}
于 2012-10-23T18:32:50.080 に答える
0

2 つのifステートメントは互いに独立しています。else は 2 番目のif条件と一緒です。したがって、それは決して 2 番目のif状態にはならず、常にそのelse部分に入ります。最初のif条件にはelseパーツがありません。

于 2012-10-23T18:30:37.973 に答える