在C ++中使用if / else的奇怪输出

时间:2012-10-23 18:28:40

标签: c++ if-statement

所以我有以下代码:

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为什么在do_something()结束时其他人仍在运行?

3 个答案:

答案 0 :(得分: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,其余所有内容都将被跳过。

答案 1 :(得分:1)

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

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);
}

答案 2 :(得分:0)

两个if语句彼此独立...... else是第二个if条件。所以它永远不会进入第二个if条件并始终进入其else部分。 第一个if条件没有else部分。