gpt4 book ai didi

当前一行有多个 "else"语句时,C++ "if"语句

转载 作者:行者123 更新时间:2023-12-02 16:11:56 31 4
gpt4 key购买 nike

下面的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]statement-false内部 if-else-语句。

意图和行并不重要,这就是为什么建议始终使用大括号:

        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,这基本上只是对他们(现已删除)答案的重新表述。

关于当前一行有多个 "else"语句时,C++ "if"语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67771250/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com