gpt4 book ai didi

c++ - 关于 'case'中 'switch'语句中的大括号

转载 作者:太空狗 更新时间:2023-10-29 23:21:55 29 4
gpt4 key购买 nike

今天,当我尝试编写代码来仅添加和减去两个 2*2 矩阵时,我在其中使用了 switch 语句,但出现错误:

case bypass initialization of local variable in function main()

代码

#include <iostream.h>
#include <conio.h>
#include <string.h>

int
main()
{
int mat1[2][2], mat2[2][2], mat3[2][2];

cout << "Enter the elements in the first matrix";
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
cin >> mat1[i][j];
}
}

cout << "\n\nEnter the elements of the second matrix";

for (int k = 0; k < 2; k++) {
for (int l = 0; l < 2; l++) {
cin >> mat2[k][l];
}
}

cout << "\n\nsaved......";

int choice;
cout << "\n\n\nFor adding these two matrices,press 1";
cout << "\nFor subtracting these two matrices,press 2";
cin >> choice;

switch (choice) {
case 1:

cout << "The addition of the two matrices will yield";
for (int a = 0; a <= 1; a++) {
for (int b = 0; b <= 1; b++) {
mat3[a][b] = mat1[a][b] + mat2[a][b];
}
}
break;

case 2:
cout << "The subtraction of the two matrices will yield";
for (int c = 0; c <= 1; c++) {
for (int d = 0; d <= 1; d++) {
mat3[c][d] = mat1[c][d] - mat2[c][d];
}
}
break;
}
getch();
return 0;
}

我还发现现在可以通过将案例代码放入大括号中来消除此错误,

  1. 我的困惑是关于 error ...
  2. &case中大括号的要求....

(我知道我没有使用新的编码约定,比如 <iostream> 、std 命名空间等等,因为我在 Turbo C++ 编译器中编写了它,所以一个中肯的答案是谦虚地请求。)

最佳答案

switch 语句只是一堆标签和编译器根据 switch 测试中事物的值完成的 goto

当函数中有一个局部变量时,在该变量声明之后的任何地方都可以使用它。例如:

int a;
// can use a now

但是,在 switch 语句中,如果您有局部变量:

case a:
int a;
break;
case b:
// we can use a here because these cases are just labels used in a goto
// i.e. the cases do *not* create a new scope

因此,当您在 case 中有一个变量时,该变量存在于它下面的 case 中,但该变量将不存在,因为初始化它的代码被跳过了通过案例陈述。我很难解释,也许其他人可以做得更好。

大括号解决了这个问题,因为它们使变量成为局部变量,因此它不存在于后续的 case 中。它只有在输入特定的 case 时才会创建,如果您忘记了 break 并且控制权落到了下一个 case ,结束 } 结束作用域并导致变量被销毁,因此无法从下一个 case 访问它,并且无法跳过初始化。

所以请记住,所有case 都共享作用域。这可能有助于您理解这一点。

关于c++ - 关于 'case'中 'switch'语句中的大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044574/

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