C ++:在switch语句中使用多个条件

时间:2015-02-17 21:12:13

标签: c++ switch-statement

我正处于一个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语句?我可以获得第一级,但是如何嵌套并具有多个条件,如上面的温度语句?

4 个答案:

答案 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语句的工作原理如下:

&#13;
&#13;
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;
&#13;
&#13;