你好,我有这段代码,我似乎无法正常工作。该循环将循环三遍,然后假设addCourse会添加所有三个选择。问题在于addCourse函数仅将所有三个选择的最后一位相加。示例:
如果我选择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);
}
switch (coursepick)
{
case 1: course= "Maths"; break;
case 2: course= "Quantum"; break;
case 3: course= "Reality"; break;
default: break;
}
如果您在每种情况下都没有中断,那么只需继续下一个,下一个,然后直到情况3并在默认情况下中断就可以了。
在C ++中,case
语句自动移至下一个。您必须在每个break
之后插入case
。
switch (coursepick)
{
case 1: course= "Maths"; break;
case 2: course= "Quantum"; break;
case 3: course= "Reality"; break;
default: break;
}
在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;
}
如其他文章所述,您需要在每个案例的结尾处加上关键字“ 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;
}
Dude您可以为所有case语句添加Break标签吗?应该是这样的
switch (coursepick)
{
case 1: course= "Maths";
break;
case 2: course= "Quantum";
break;
case 3: course= "Reality";
break;
default: break;
}
如果您不提及,将贯穿所有案例,最后以防万一,Reality将覆盖三门课程。
因此,对于断言而言,必须中断
正如已经说过的,您必须在所有案例标签上使用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 );
}