为什么不能将一个变量的值分配给另一个变量?

时间:2019-05-03 12:48:08

标签: c++

我有两个变量,我想分别处理较大和较小的变量。

我的方法:

a = 1;
b = 2;

if (a >= b){
    int c = a;
    int d = b;
}
else{
    int c = b;
    int d = a;
}

我得到了一个未使用的变量的错误,后来当我尝试使用cd时,它说

  

c无法解决

有没有办法解决这个问题?

4 个答案:

答案 0 :(得分:29)

在两种情况下,cd被限制在if else块中的括号中,因此您无法访问它们之外。

您需要某种形式的东西

int c, d;
if (a >= b){
    c = a;
    d = b;
} else {
    c = b;
    d = a;
}

答案 1 :(得分:21)

正如其他人指出的那样,这里的问题是在哪里声明变量。您不能在声明它们的范围之外使用它们,否则会出现错误。

如果可以使用C ++ 17,则可以使用std::minmax和类似structured binding的代码来修复代码

int main()
{
    int a = 5, b = 10;
    auto [min, max] = std::minmax(b, a);
    std::cout << min << " " << max;
}

这非常好,因为现在您没有任何时间未初始化的变量。

答案 2 :(得分:6)

这是因为您要在if语句中声明变量。

从逻辑上讲,您可以相信else以某种方式保证了如果声明既在if也在else块中,则将分配变量。

正确的方法是在if块之前声明变量,否则变量的使用将限于声明变量的范围。

此外,您也可以使用三元操作来执行此操作,而无需使用ifelse

        int a = 1;
        int b = 2;

        int c = a >= b ? a : b;
        int d = b < a ? b : a;

使用这种类型的语法,您可以省去编写ifelse块来进行简单变量分配的麻烦。如果条件为真,则?之后的变量 为变量,如果条件为假,则:之后的变量为结果。

答案 3 :(得分:4)

这是一个范围问题,您正在范围内创建变量,并且无法在外部访问它们

if (a >= b){
    int c = a;  // c and d belongs to that if scope
    int d = b;
}
else{
    int c = b;  // c and d belongs to that else scope
    int d = a;
}

将代码更改为此:

a = 1;
b = 2;
int c;
int d;

if (a >= b){
    c = a;
    d = b;
}
else{
    c = b;
    d = a;
}
// You can now call c and d there

缩短代码的一种方法是存储a >= b的布尔值,并在三元表达式中使用它来设置cd

例如:

a = 1;
b = 2;
bool IsAGreaterOrEqualToB = (a >= b);
int c = ((IsAGreaterOrEqualToB) ? (a) : (b));
int d = ((IsAGreaterOrEqualToB) ? (b) : (a));