在C ++中切换语句行为

时间:2015-02-12 15:19:34

标签: c++ switch-statement

我无法理解我的C ++开关语句。

我必须输入两次接受的整数间隔才能使函数返回到开关。然后它直接落到案例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) - Skalldyr\n"; 
  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;
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你有:

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

运行此项时,您需要创建一个Fug1对象,然后调用les()函数。当您在les()中输入适当的年龄时,该函数将返回。由于break;在case块之外,它实际上是在断开switch语句并进入循环结束。然后它循环回到循环的顶部,让你再次输入一个选择。如果你在内部移动break,那么它就可以正常运行。这是改变的循环:

do
    {
        cout << "Hvilken dyreart ønsker du å registrere? (Q for å avslutte)"
            << "\n1) - Fugl \n2) - Fisk \n3) - Insekt \n4) - Skalldyr\n";
        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');