开关盒和For Loop C++

Switch Case and For Loop C++

本文关键字:Loop C++ For 开关      更新时间:2023-10-16

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

如果我选择1 2 3,那么它应该发出:

  1. 数学
  2. Quantum
  3. 现实

相反,它发出:

  1. 现实
  2. 现实
  3. 现实

(这三种情况都是最后选择的情况3)

我该如何解决这个问题。非常感谢。下面是代码。

for(int p = 0; p < 3; p++)
{
    cout << "Please select a course:" <<endl;
    cout<<"1. Mathsn";
    cout<<"2. Quantumn";
    cout<<"3. Realityn";
    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);
}
switch (coursepick)
{
case 1: course= "Maths"; break;
case 2: course= "Quantum"; break;
case 3: course= "Reality"; break;
default: break;
}

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

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

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

switch语句中,每个case中都需要一个break语句。如果没有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;
}

正如其他文章中所提到的,如果你不想让它渗透到下一个案例中,你需要用关键字"break;"来结束每个案例。

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

Switch语句具有这种行为,因为有时希望过滤多个案例。这样可以避免在多个案例具有相同结果时重复代码。以下示例显示了if case"a"或case"a"的等效情况。如果大小写为'b'或'b',请执行此操作。

switch (input)
{
    case 'a':
    case 'A': text = "Letter A"; break;
    case 'b':
    case 'B': text = "Letter B"; break;
    default: text = "Not A or B"; break;
}

Dude你能为所有的case语句添加Break标签吗。应该像这个

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

如果你不提,它将贯穿所有的案例,最后在案例三中,课程将被现实改写。

所以break对于案例语句

是必要的

正如前面所说,任何案例标签都必须使用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. Mathsn";
        cout<<"2. Quantumn";
        cout<<"3. Realityn";
        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 );
}