切换用例和For Loop C ++

问题描述 投票:0回答:6

你好,我有这段代码,我似乎无法正常工作。该循环将循环三遍,然后假设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. 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);
}
c++ loops switch-statement
6个回答
2
投票
switch (coursepick)
{
case 1: course= "Maths"; break;
case 2: course= "Quantum"; break;
case 3: course= "Reality"; break;
default: break;
}

如果您在每种情况下都没有中断,那么只需继续下一个,下一个,然后直到情况3并在默认情况下中断就可以了。


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
投票

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;
}

1
投票

如其他文章所述,您需要在每个案例的结尾处加上关键字“ break;”。如果您不希望它陷入下一种情况。

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

Switch语句具有此行为,因为有时您want可以通过多种情况进行过滤。当多个案例具有相同的结果时,这使您不必重复代码。以下示例显示了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;
}

0
投票

Dude您可以为所有case语句添加Break标签吗?应该是这样的

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

如果您不提及,将贯穿所有案例,最后以防万一,Reality将覆盖三门课程。

因此,对于断言而言,必须中断


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 );
}
© www.soinside.com 2019 - 2024. All rights reserved.