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