Switch Case和For循环C ++

时间:2014-04-27 17:59:42

标签: c++ loops switch-statement

你好,我有这个代码,我似乎无法让它工作。循环循环三次然后addCourse假设添加所有三个选择。问题是addCourse函数只为所有三个选项添加最后一位。示例:

如果我选择1 2 3,则假设给出:

  1. 数学
  2. 量子
  3. 现实
  4. 相反,它给出了:

    1. 现实
    2. 现实
    3. 现实
    4. (所有三个是最后选择的案例3)

      如何排序此问题。谢谢。以下是代码。

      for(int p = 0; p < 3; p++)
      {
          cout << "Please select a course:" <<endl;
          cout<<"1. Maths\n";
          cout<<"2. Quantum\n";
          cout<<"3. Reality\n";
          cin >> coursepick;
          switch (coursepick)
          {
          case 1: course= "Maths";
          case 2: course= "Quantum";
          case 3: course= "Reality";
          default: break;
          }
          cout << "Please insert the course mark:" <<endl;
          cin >> mark;
          cin.ignore();
          phys[0]->addCourse(course,mark);
      }
      

6 个答案:

答案 0 :(得分:2)

在C ++中,case语句会自动转到下一个语句。您必须在每个break之后插入case

switch (coursepick)
{
    case 1: course= "Maths"; break;
    case 2: course= "Quantum"; break;
    case 3: course= "Reality"; break;
    default: break;
}

答案 1 :(得分:2)

switch (coursepick)
{
case 1: course= "Maths"; break;
case 2: course= "Quantum"; break;
case 3: course= "Reality"; break;
default: break;
}

如果你不在每个案例结束时中断,它只会继续下一个,然后是下一个,然后直到案例3并在默认情况下中断。

答案 2 :(得分:1)

switch语句中,每个break都需要case个语句。如果没有break语句,C将落入下一个案例。您的案例陈述等同于:

course= "Maths";
course= "Quantum";
course= "Reality";

相反,它必须是:

switch (coursepick)
{
    case 1: course= "Maths"; break;
    case 2: course= "Quantum"; break;
    case 3: course= "Reality"; break;
    default: break;
}

答案 3 :(得分:0)

Dude你能为所有case语句添加Break标记吗?应该是这样的

switch (coursepick)
    {
    case 1: course= "Maths";
            break;
    case 2: course= "Quantum";
            break;
    case 3: course= "Reality";
            break;
    default: break;
    }

如果你没有提及它将通过所有案件,最后如果有三个课程将由Reality写完。

因此案例陈述需要中断

答案 4 :(得分:0)

正如其他帖子中所提到的,您需要使用关键字“break”结束每个案例。如果你不想让它进入下一个案例。

switch (coursepick)
{
    case 1: course= "Maths"; break;
    case 2: course= "Quantum"; break;
    case 3: course= "Reality"; break;
    default: break;
}

Switch语句有这种行为,因为有时你想要它来过滤多个案例。这可以避免在多个案例具有相同结果时重复代码。以下示例显示if case'a'OR case'A'的等效项,执行此操作。如果是'b'或'B',请执行此操作。

switch (input)
{
    case 'a':
    case 'A': text = "Letter A"; break;

    case 'b':
    case 'B': text = "Letter B"; break;

    default: "Not A or B"; break;
}

答案 5 :(得分:0)

正如已经说过的那样,你必须使用break作为任何案例标签。

switch (coursepick)
{
case 1: course= "Maths"; break;
case 2: course= "Quantum"; break;
case 3: course= "Reality"; break;
default: break; 
}

但是在任何情况下代码都是无效的,如果用户输入的数字超出了可接受的范围,则不会分配变量课程。但是,您将在语句

中使用此未分配的变量
phys[0]->addCourse(course,mark);

还不清楚为什么变量是在循环外定义的。

我会按以下方式编写循环

enum { Maths = 1, Quantum, Reality };

for ( int p = 0; p < 3; p++ )
{
    do
    {
        cout << "\nPlease select a course:" <<endl;
        cout<<"1. Maths\n";
        cout<<"2. Quantum\n";
        cout<<"3. Reality\n";

        cin >> coursepick;

        if ( !( Maths <= coursepick && coursepick <= Reality ) )
        {
            cout << "Error. Invalid input. Please repeat" << std::endl;
        }
    } while ( !( Maths <= coursepick && coursepick <= Reality ) ); 

    switch (coursepick)
    {
        case Maths: course= "Maths"; break;
        case Quantum: course= "Quantum"; break;
        case Reality: course= "Reality"; break;
        default: abort();
    }

    cout << "Please insert the course mark:" << endl;
    cin >> mark;
    cin.ignore();
    phys[0]->addCourse( course, mark );
}