【问题标题】:Switch Statement with multi-dimensional array具有多维数组的 Switch 语句
【发布时间】:2021-05-13 14:35:51
【问题描述】:

我有以下 switch 语句实际上可以正常工作。

          for (n = 0; n < 10; n++){

          switch(results[r][n]){

           case 0:
           result[r][n] = "FAIL";
           break;

           case 1:
           result[r][n] = "PASS";
           break;

           default:
           break;

        }
      }

我的问题是为什么这会起作用,它应该起作用还是有更好的方法来做到这一点? 这是您应该如何在开关中实现多维数组的方式吗? (r = 0 或 1) 编译器如何知道 case 0: 是指 r 还是 n?

【问题讨论】:

  • 这里没有足够的代码来确切地知道发生了什么,但如果我猜的话,我会说results 是一个普通的ints 的二维数组,并且results[r][n] 指向一个 int。不知道你为什么认为那行不通。
  • 请注意,resultresults 是不同的数组。
  • 没错,我只是想弄清楚编译器如何知道 case 0: 和 case 1: 指的是数组的 [r] 组件而不是 [n]
  • case 0 指的是results[r][n],而不是rncase 之后的值与switch() 中的值匹配。
  • 您需要显示更多代码上下文。请添加minimal reproducible example 我们不知道resultsresult 类型是什么。

标签: c++ switch-statement


【解决方案1】:

case 0 指的是results[r][n],而不是rncase 之后的值与switch() 中表达式的值匹配。

看看tutorial on switch-case

你的 switch 语句

switch(results[r][n]) {

case 0:
    result[r][n] = "FAIL";
    break;

case 1:
    result[r][n] = "PASS";
    break;

default:
    break;

}

相当于:

if (results[r][n] == 0)
    result[r][n] = "FAIL";

else if (results[r][n] == 1)
    result[r][n] = "PASS";

else
    // do nothing

对于将字符串分配给应该是整数数组的东西而感到困惑的任何人,results 是 integer[] 数组,result 是一个不同的变量,它是 string[] 数组。正如 Robert 在下面的 cmets 中所指出的,这里似乎需要一个更好的命名系统。

【讨论】:

  • 这很有道理,我对二维数组还是很陌生。当然,开关正在确定 result[r][n] 的内存位置是否包含 0 或 1
  • @Joe:请注意,resultresults 是不同的数组。
  • @RobertHarvey 是的,我知道这一点。我应该说 location results[r][n] 是否包含 0 或 1
  • 这里似乎需要更好的数组命名。
  • @RobertHarvey - 我同意!
最近更新 更多