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 inputafter ?do_something()AKA 为什么 elsedo_something()完成后仍然运行?

4

3 回答 3

5

您省略了else第二个之前的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);
}

这样,当命令为P,时do_something将被调用,其余的将被跳过。

于 2012-10-23T18:30:04.657 回答
1

else第二个 if而不是第一个相关联。因此,在完成第一个之后,if它进入else第二个 if 的部分。这就是你得到这个的原因。你应该使用这个

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

这两个if语句是相互独立的...... else 是第二个if条件。所以它永远不会进入第二个if条件,总是进入它的else部分。第一个if条件没有else作用。

于 2012-10-23T18:30:37.973 回答