开关盒和For Loop C++
Switch Case and For Loop C++
你好,我有这段代码,但我似乎无法让它工作。循环循环三次,然后假设addCourse将所有三个选择相加。问题是addCourse函数只为所有三个选择添加最后一位。示例:
如果我选择1 2 3,那么它应该发出:
- 数学
- Quantum
- 现实
相反,它发出:
- 现实
- 现实
- 现实
(这三种情况都是最后选择的情况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 );
}
相关文章:
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- "Ill-defined for-loop - loop executes infinitely" (MSVC C6295)
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- g++ -O3 为 loop 创建了奇怪的指令 - 两个具有相同 asm 的版本
- For-loop或std::any_of,我应该使用哪一个?
- 什么是'do while loop'的真实应用?
- loop() 函数之外的无限循环
- 如何在 Arduino 延迟期间在 void loop() 中使用 serial.available()?
- 在"for loop"中使用GOTOXY定位
- 如果用户输入数字 <0,我如何停止" while loop "?
- 如何在 Skylake 架构上最大化 sqrt-heavy loop 的指令级并行性?
- 在这种情况下,我将如何继续 1 到 360 的"for loop"处理指针和地址?
- C++ For Loop在过程中被跳过了.如何解决?
- 如何增加"for loop"呈现的结果?
- "Loop will run at most once (loop increment never executed)" C++
- 叮叮当当的'range-loop-analysis'诊断是关于什么的?
- C++ cin.ignore and getline in while loop
- for(;;) vs do..while() for main program loop
- 在C 中,如何在使用for loop的整数中找到所有连续的复合编号