C++ 嵌套开关语句

C++ 嵌套开关语句,c++,nested,switch-statement,sudoku,C++,Nested,Switch Statement,Sudoku,目前,我正在尝试创建一个程序,该程序将自动生成一个完整的数独板从头开始,虽然相同的功能可以通过轻微的修改来解决部分填充的数独板。无论如何,问题在于,当将一个新数字加载到电路板中时,您显然必须检查该数字是否已经存在于同一列或行中,但也存在于加载到的同一个3x3正方形中。在程序的某部分使用嵌套的switch语句,在该部分中,您必须对照同一3x3正方形中的数字检查数字,尽管break语句似乎都位于正确的位置。compliler说,作为嵌套switch语句一部分的第二个case语句的第一个数字是:Err

目前,我正在尝试创建一个程序,该程序将自动生成一个完整的数独板从头开始,虽然相同的功能可以通过轻微的修改来解决部分填充的数独板。无论如何,问题在于,当将一个新数字加载到电路板中时,您显然必须检查该数字是否已经存在于同一列或行中,但也存在于加载到的同一个3x3正方形中。在程序的某部分使用嵌套的switch语句,在该部分中,您必须对照同一3x3正方形中的数字检查数字,尽管break语句似乎都位于正确的位置。compliler说,作为嵌套switch语句一部分的第二个case语句的第一个数字是:Error:case label value已经出现在这个开关中,即使这个数字没有出现,问题是为什么

代码如下:

bool SudokuClass::checkPresentGrid(int &temporary, int row, int column)
{
bool indicator;
 switch (row)
{
case 0 || 3 || 6:       //If the number is being loaded into row 0,3 or 6
    switch (column)
    {
    case 0 || 3 || 6:   //Check all other spaces in the same 3x3 grid   
        if (temporary == (completeSudoku[row + 1][column + 1] || completeSudoku[row + 1][column + 2] || completeSudoku[row + 2][column + 1] || completeSudoku[row + 2][column + 2]))
        {
            indicator = true;
        }
        break;
    case 1 || 4 || 7:
        if (temporary == (completeSudoku[row + 1][column - 1] || completeSudoku[row + 1][column + 1] || completeSudoku[row + 2][column - 1] || completeSudoku[row + 2][column + 1]))
        {
            indicator = true;
        }
        break;
    case 2 || 5 || 8:
        if (temporary == (completeSudoku[row + 1][column - 2] || completeSudoku[row + 1][column - 1] || completeSudoku[row + 2][column - 2] || completeSudoku[row + 2][column - 1]))
        {
            indicator = true;
        }
        break;
    }
    break;
case 1 || 4 || 7:               //If the number is being loaded into row 1, 4 or 7
    switch (column)
    {
    case 0 || 3 || 6:   //Check all other spaces in the same 3x3 grid   
        if (temporary == (completeSudoku[row - 1][column + 1] || completeSudoku[row - 1][column + 2] || completeSudoku[row + 1][column + 1] || completeSudoku[row + 1][column + 2]))
        {
            indicator = true;
        }
        break;
    case 1 || 4 || 7:
        if (temporary == (completeSudoku[row - 1][column - 1] || completeSudoku[row - 1][column + 1] || completeSudoku[row + 1][column - 1] || completeSudoku[row + 1][column + 1]))
        {
            indicator = true;
        }
        break;
    case 2 || 5 || 8:
        if (temporary == (completeSudoku[row - 1][column - 2] || completeSudoku[row - 1][column - 1] || completeSudoku[row + 1][column - 2] || completeSudoku[row + 1][column - 1]))
        {
            indicator = true;
        }
        break;
    }
    break;
case 2 || 5 || 8:               //If the number is being loaded into row 2, 5 or 8
    switch (column)
    {
    case 0 || 3 || 6:           //Check all other spaces in the same 3x3 grid   
        if (temporary == (completeSudoku[row - 2][column + 1] || completeSudoku[row - 2][column + 2] || completeSudoku[row - 1][column + 1] || completeSudoku[row - 1][column + 2]))
        {
            indicator = true;
        }
        break;
    case 1 || 4 || 7:
        if (temporary == (completeSudoku[row - 2][column - 1] || completeSudoku[row - 2][column + 1] || completeSudoku[row - 1][column - 1] || completeSudoku[row - 1][column + 1]))
        {
            indicator = true;
        }
        break;
    case 2 || 5 || 8:
        if (temporary == (completeSudoku[row - 2][column - 2] || completeSudoku[row - 2][column - 1] || completeSudoku[row - 1][column - 2] || completeSudoku[row - 1][column - 1]))
        {
            indicator = true;
        }
        break;
    }
    break;
}
return indicator;
}改变

case 0 || 3 || 6:       //If the number is being loaded into row 0,3 or 6

。。。等等,再加上你的其他案例陈述

您的代码案例0 | | 3 | | 6

评估为情况0 | | 3 | | 6

这就变成了case false | | true | | true

这就变成了case-true,这不是您想要的。

case语句必须是值。您正在尝试与表达式的结果进行比较

e、 g.鉴于本规范:

switch($foo) {
   case $bar || $baz: 
       ...
}
按照常规重写,前提是其执行方式与以下内容完全相同:

$temp = $bar || $baz;   // boolean OR operation, $temp becomes true/false
if ($foo == $temp) {
    ...
您试图将其视为:

if (($temp == $bar) || ($temp == $baz))
当然不是

如果要比较多个值,并让每个值执行相同的代码位,请使用开关直通行为:

switch($foo) {
    case $bar:
    case $baz:
          .... do something
          break;

你能再向用户解释一下为什么这是错误的吗?
switch($foo) {
    case $bar:
    case $baz:
          .... do something
          break;