switch语句中的默认值不起作用



你好,我有以下问题。我在stackoverflow上找不到它。我想为switch语句设置一个默认情况,但当默认情况发生时,什么也不会发生。你可以在这里看到我的代码:

int main() 
{
char riegel;
std::cout << "Please choose a chocolate! (a-d)";
std::cin >> riegel;
if (riegel == 'a' || riegel == 'b' || riegel == 'c' || riegel == 'd' || riegel == 'A' || riegel 
== 'B' || riegel == 'C' || riegel == 'D')
{
switch (riegel)
{
case 'a': std::cout << "You chose Snickers" << std::endl; break;
case 'b': std::cout << "You chose Milky Way." << std::endl; break;
case 'c': std::cout << "You chose MARS." << std::endl; break;
case 'd': std::cout << "You chose Kinder-Riegel." << std::endl; break;
case 'A': std::cout << "You chose Snickers." << std::endl; break;
case 'B': std::cout << "You chose Milky Way." << std::endl; break;
case 'C': std::cout << "You chose MARS." << std::endl; break;
case 'D': std::cout << "You chose Kinder-Riegel" << std::endl; break;
default: std::cout << "Chocolate not found." << std::endl; break;
}
}

}

switch语句在if语句内

if (riegel == 'a' || riegel == 'b' || riegel == 'c' || riegel == 'd' || riegel == 'A' || riegel 
== 'B' || riegel == 'C' || riegel == 'D')

因此,当riegel不是case标签所涵盖的值时,switch语句将不会执行。

这是因为当您输入另一个字符时,您永远不会输入switch语句。尝试删除整个if语句,因为检查两次条件是无用的,一次使用开关,一次用if.

之所以会发生这种情况,是因为您只过滤掉了所需的选择"a"b"c"d";在调用switch语句之前,在IF循环CCD_。

因此,if语句甚至不允许错误的选择进入切换循环。

删除if语句,您将获得默认情况所需的输出

#include<iostream>
int main()
{
char riegel;
std::cout << "Please choose a chocolate! (a-d)";
std::cin >> riegel;
switch (riegel)
{
case 'a':
case 'A':
std::cout << "You chose Snickers" << std::endl;
break;
case 'b':
case 'B':
std::cout << "You chose Milky Way." << std::endl;
break;
case 'c':
case 'C'
std::cout << "You chose MARS." << std::endl; 
break;
case 'd':
case 'D':
std::cout << "You chose Kinder-Riegel." << std::endl; 
break;

default: 
std::cout << "Chocolate not found." << std::endl;
break;
}
}

此外,您可以使用上面的语法为切换情况使用多个条件

最新更新