我正处于一个C ++编程类的开头,我需要帮助嵌套switch语句和使用多个条件,因为我必须将我已经编写的程序从if / else语句转换为switch语句,因为我不知道我应该使用switch语句。
例如,我该如何改变:
if (temperature >= -459 && temperature <= -327)
{
cout << "Ethyl Alcohol will freeze.\n";
}
else if (temperature >= -326 && temperature <= -30)
{
cout << "Water will freeze.\n";
}
else if ...
{
}
else
{
}
进入switch / case语句?我可以获得第一级,但是如何嵌套并具有多个条件,如上面的温度语句?
答案 0 :(得分:1)
首先,这个问题在C中,而不是在C ++中。 C ++继承了大部分C语言,包括switch-case。
除非您开始逐个枚举所有值,否则您无法使用开关执行此操作,如下所示:
switch (temperature) {
case -459:
case -458:
....
case -327: <do something>; break;
case -326:
.....
}
这是因为在C中,switch-case被简单地翻译成一系列if-goto语句,案例只是标签。
答案 1 :(得分:0)
在你的情况下,你坚持使用if-else-if
阶梯。
您可以使用具有温度和要打印的文本的查找表:
struct Temperature_Entry
{
int min_temp;
int max_temp;
const char * text_for_output;
};
static const Temperature_Entry temp_table[] =
{
{-459, -327, "Ethyl Alcohol will freeze.\n"},
{-326, -30, "Water will freeze.\n"},
};
static const unsigned int entry_count =
sizeof(temp_table) / sizeof(temp_table[0]);
//...
int temperature;
for (unsigned int i = 0; i < entry_count; ++i)
{
if ( (temperature >= temp_table[i].min_temp)
&& (temperature < temp_table[i].max_temp))
{
std::cout << temp-table[i].text_for_output;
}
}
答案 2 :(得分:0)
正如许多人所指出的,你不能在范围和动态公式中使用switch case。因此,如果您想要使用它们,您将不得不编写一个温度函数,并返回一个已知的温度范围之外的温度范围。最后,您可以使用开关/外壳来测量温度范围。
enum TemperatureRange { FrigginCold, UtterlyCold, ChillinglyCold, Frosty, ... };
TemperatureRange GetRange( int temperature );
// ...
switch( GetRange( temperature ) )
{
case FrigginCold: cout << "The eskimos vodka freezes."; break;
case UtterlyCold: cout << "The eskimo starts to dress."; break;
// ...
}
答案 3 :(得分:0)
Switch语句的工作原理如下:
int variable = 123; // or any other value
switch (variable)
{
case 1:
{
// some code for the value 1
break;
}
case 12:
{
// some code for the value 12
break;
}
case 123:
{
// some code for the value 123
break;
}
case 1234:
{
// some code for the value 1234
break;
}
case 12345:
{
// some code for the value 12345
break;
}
default:
{
// if needed, some code for any other value
break;
}
}
&#13;