C++; 我理解C++的转换语句有困难。< /P>

C++; 我理解C++的转换语句有困难。< /P>,c++,switch-statement,C++,Switch Statement,我必须输入两次接受的整数间隔,函数才能返回到开关。然后直接进入案例2 继承类: class Fugl : public DyrLuft { private: int alder; public: Fugl() : DyrLuft() { } void les() { do { cout << "\nS

我必须输入两次接受的整数间隔,函数才能返回到开关。然后直接进入案例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;
}
class Fugl:公共数据块
{
私人:
内桤木;
公众:
Fugl():DyrLuft()
{ }                                         
void les()
{ 
做
{
桤木;
如果(桤木<0 | |桤木>130)
cout(130);
}
};
Main:

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;
}
intmain()
{
char valg='\q';
库特瓦尔格;
开关(valg)
{
案例“1”:
{
Fugl Fugl;Fugl.les();
}中断;
案例“2”:
{
Fisk-Fisk;Fisk.les();
}中断;
案例“3”:
{
Insekt Insekt;Insekt.les();
}中断;
案例“4”:
{
Skalldyr Skalldyr;Skalldyr.les();
}中断;
案例“Q”:返回0;
案例“q”:返回0;

默认设置:cout我不知道您的案例中发生了什么,但我运行了您的代码,它对我来说运行正常。输入1,4,Q,程序按预期退出…可能是编译器或DyrLuft类问题(我只是删除了继承以使其正常工作,也删除了案例2,3,4中的行)。

您有:

case '1':
        {
        Fugl fugl; fugl.les();
        } break;
运行此操作时,创建一个Fug1对象,然后调用
les()
函数。在
les()中输入适当的年龄时
函数返回。由于
break;
在case块之外,它实际上正在中断switch语句并进入循环的末尾。然后它循环回到循环的顶部,并使您再次输入一个选择。如果您在case块内移动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');
do
{
库特瓦尔格;
开关(valg)
{
案例“1”:
{
Fugl Fugl;Fugl.les();
打破
} 
案例“2”:
{
Fisk-Fisk;Fisk.les();
打破
}
案例“3”:
{
Insekt Insekt;Insekt.les();
打破
}
案例“4”:
{
Skalldyr Skalldyr;Skalldyr.les();
打破
} 
案例“Q”:返回0;
案例“q”:返回0;

默认值:cout什么是输入?
“\ndene alderen virket usannsynlig,prøv igjen!\n”
在输入
alder
之间打印?
char valg='\q';
似乎是错误的,但这不应该是问题的原因,因为
valg
很快就会被覆盖……还有,
DyrLuft()
?当您声明
Fugl Fugl;
时会调用此函数。如果我输入的值大于130或小于0:
您可以发布终端的副本/粘贴吗?这样我们就可以知道打印了哪些消息以及提供了哪些输入。我尝试删除所有其他类,并用简单的cout-trued compute替换其余的情况r不走运地重新启动。这可能是编译器的问题吗?不,它没有跳出循环。@molbdnilo:我编辑它是为了说它跳出了switch语句。思维和手指不同步。我试着在括号内移动中断符,得到了相同的结果。@Thomas:你也在循环中移动了
cout
语句吗?