在C ++中切换语句行为

我无法理解我的C ++ switch语句。

我必须输入两次可接受的整数间隔才能返回到开关。 然后它直接通过案例2。

继承的类:

class Fugl : public DyrLuft
{
  private:
    int alder;

  public:
    Fugl() : DyrLuft()
      { }                                         
    void les()
      { 
      do
        {
        cout << "nSkriv inn fuglens alder: ";
        cin >> alder;
        if(alder < 0 || alder > 130)
          cout << "nDenne alderen virket usannsynlig, prøv igjen!n";
        } while(alder < 0 || alder > 130);
      }
};

主要:

int main()
{
  char valg = 'q';
  cout << "Hvilken dyreart ønsker du å registrere? (Q for å avslutte)"
    << "n1) - Fugl n2) - Fisk n3) - Insekt n4) - Skalldyrn"; 
  do
    {
    cin >> valg;
    switch(valg)
      {
      case '1':
        {
        Fugl fugl; fugl.les();
        } break;
      case '2':
        {
        Fisk fisk; fisk.les();
        } break;
      case '3':
        {
        Insekt insekt; insekt.les();
        } break;
      case '4':
        {
        Skalldyr skalldyr; skalldyr.les();
        } break;
      case 'Q': return 0;
      case 'q': return 0;
      default: cout << "Velg en av ovennevnte!n";
      }
    } while(valg != 'Q' || valg != 'q');
  return 0;
}

我不知道你的情况发生了什么,但是我运行了你的代码,它对我来说工作得很好。 输入1,4,Q和程序退出预期....可能是一个编译器或DyrLuft类问题(我只是删除了继承,使其工作,也来自案件2,3,4行)。


你有:

case '1':
        {
        Fugl fugl; fugl.les();
        } break;

当你运行这个时,你创建一个Fug1对象,然后调用les()函数。 当您在les()输入适当的年龄时,函数将返回。 自break;以来break; 在case块之外,它实际上是断开了switch语句并且到了循环的结尾。 然后循环回到循环的顶部,并让您再次输入选择。 如果你在内部移动中断块,它将按照它的功能运行。 这是改变的循环:

do
    {
        cout << "Hvilken dyreart ønsker du å registrere? (Q for å avslutte)"
            << "n1) - Fugl n2) - Fisk n3) - Insekt n4) - Skalldyrn";
        cin >> valg;
        switch (valg)
        {
        case '1':
        {
                    Fugl fugl; fugl.les(); 
                    break;
        } 
        case '2':
        {
                    Fisk fisk; fisk.les();
                    break;
        }
        case '3':
        {
                    Insekt insekt; insekt.les();
                    break;
        }
        case '4':
        {
                    Skalldyr skalldyr; skalldyr.les();
                    break;
        } 
        case 'Q': return 0;
        case 'q': return 0;
        default: cout << "Velg en av ovennevnte!n";
        }
    } while (valg != 'Q' || valg != 'q');
链接地址: http://www.djcxy.com/p/84473.html

上一篇: Switch statement behavior in C++

下一篇: Should the default case of switch statment have a break?