你好,我有这个代码,我似乎无法让它工作。循环循环三次然后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);
}
答案 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 );
}