当前一行有多个 "if" 语句时,C++ "else" 语句
C++ "else" statement when the preceding line has multiple "if" statements
下面的C++程序
#include <iostream>
int main() {
for(int i=0; i<5; i++) for(int j=0; j<5; j++){
if(i==1) if(j==2) std::cout << "A " << i << ' ' << j << std::endl;
else std::cout << "B " << i << ' ' << j << std::endl;
}
return 0;
}
产出
B 1 0
B 1 1
A 1 2
B 1 3
B 1 4
由此我推断“else”语句指的是第二个“if”。
C++ 标准中是否描述了这种行为?是否有理由以这种方式实施?我直觉上希望“else”指的是第一个“if”。
有一个回答试图提倡加大括号。我们也可以不带大括号重新排列您的代码,以更清楚地看到它做了什么(以及为什么它没有按照您的预期进行):
#include <iostream>
int main() {
for(int i=0; i<5; i++) for(int j=0; j<5; j++){
if(i==1)
if(j==2)
std::cout << "A " << i << ' ' << j << std::endl;
else
std::cout << "B " << i << ' ' << j << std::endl;
}
return 0;
}
一般语法(参见 here)是:
if ( condition ) statement-true
在你的情况下整个
if(j==2)
std::cout << "A " << i << ' ' << j << std::endl; // [1]
else
std::cout << "B " << i << ' ' << j << std::endl; // [2]
是statement-true
。而一般 if-else
是:
if ( condition ) statement-true else statement-false
因此,[1]
是 statement-true
,[2]
是内部 if-else 语句的 statement-false
。
意图和线条并不重要,这就是为什么建议始终使用大括号:
if(i==1) {
if(j==2) {
std::cout << "A " << i << ' ' << j << std::endl;
} else {
std::cout << "B " << i << ' ' << j << std::endl;
}
}
或者,如果这就是您想要的:
if(i==1) {
if(j==2) {
std::cout << "A " << i << ' ' << j << std::endl;
}
} else {
std::cout << "B " << i << ' ' << j << std::endl;
}
致谢 acraig5075,这基本上只是他们(现已删除)答案的重新表述。
下面的C++程序
#include <iostream>
int main() {
for(int i=0; i<5; i++) for(int j=0; j<5; j++){
if(i==1) if(j==2) std::cout << "A " << i << ' ' << j << std::endl;
else std::cout << "B " << i << ' ' << j << std::endl;
}
return 0;
}
产出
B 1 0
B 1 1
A 1 2
B 1 3
B 1 4
由此我推断“else”语句指的是第二个“if”。
C++ 标准中是否描述了这种行为?是否有理由以这种方式实施?我直觉上希望“else”指的是第一个“if”。
有一个回答试图提倡加大括号。我们也可以不带大括号重新排列您的代码,以更清楚地看到它做了什么(以及为什么它没有按照您的预期进行):
#include <iostream>
int main() {
for(int i=0; i<5; i++) for(int j=0; j<5; j++){
if(i==1)
if(j==2)
std::cout << "A " << i << ' ' << j << std::endl;
else
std::cout << "B " << i << ' ' << j << std::endl;
}
return 0;
}
一般语法(参见 here)是:
if ( condition ) statement-true
在你的情况下整个
if(j==2)
std::cout << "A " << i << ' ' << j << std::endl; // [1]
else
std::cout << "B " << i << ' ' << j << std::endl; // [2]
是statement-true
。而一般 if-else
是:
if ( condition ) statement-true else statement-false
因此,[1]
是 statement-true
,[2]
是内部 if-else 语句的 statement-false
。
意图和线条并不重要,这就是为什么建议始终使用大括号:
if(i==1) {
if(j==2) {
std::cout << "A " << i << ' ' << j << std::endl;
} else {
std::cout << "B " << i << ' ' << j << std::endl;
}
}
或者,如果这就是您想要的:
if(i==1) {
if(j==2) {
std::cout << "A " << i << ' ' << j << std::endl;
}
} else {
std::cout << "B " << i << ' ' << j << std::endl;
}
致谢 acraig5075,这基本上只是他们(现已删除)答案的重新表述。