问题是总结1到10的所有值,包括值3和6,但是我不知道为什么我的开关功能没有滤除3和6。 这是我的代码
#include <iostream>
using namespace std;
int main()
{
int a=1,total=0;
while (a<=10)
{
a++;
switch (a)
{
case 3:
continue;
case 6:
continue;
default:
total = total + a;
}
}
cout << "Sum of the total numbers are " << total << endl;
return 0;
}
答案 0 :(得分:3)
如果将以下内容添加到while循环的末尾:
cout << "Current total: " << total << " a=" << a << endl;
问题将变得清晰。您的输出将如下所示:
Current total: 2 a=2
Current total: 6 a=4
Current total: 11 a=5
Current total: 18 a=7
Current total: 26 a=8
Current total: 35 a=9
Current total: 45 a=10
Current total: 56 a=11
Sum of the total numbers are 56
正如你所看到的,它正确地跳过3和6,但它缺少1并且正在增加11,这是我认为你没想到的两件事。
此外,您正在使用continue
。使用switch语句,您希望使用break
来阻止在当前案例之后执行案例。 (为了详细说明这一点,我认为continue
会很好,因为我认为它正在做你想要的事情:将控制转回到while语句。如果{{1}这不会起作用但是,在switch语句之后移动了。如果你在a++
开始a
,请将条件更改为0
,如其他帖子所述,那么你可以使用{{1} }语句而不是a < 10
)
如果您将continue
移至while循环的末尾并修复break
语句,我相信它会按预期运行。
担心我的编辑可能会让人感到困惑,这里有两种替代方法可以构建代码以获得您正在寻找的结果:
a++;
或
continue
答案 1 :(得分:1)
你的代码工作正常,你只在你的中央循环中犯了一些小错误:a从2变为11而不是从1到10.它应该是这样的:
int a=0, total=0;
while (a < 10)
{
a++;
// rest of code
}
编辑所以我的答案更完整。上面的修复将使您的代码正常工作,从而产生正确的结果,但正如@Pete所指出的那样,continue
不是摆脱switch case语句的方法。您的continue
语句会直接将您移回while
循环的下一个循环。一个更好,更清洁的代码将是这样的:
int a=0,total=0;
while (a < 10)
{
a++;
switch (a)
{
case 3:
break;
case 6:
break;
default:
total = total + a;
}
// in every case you will get here; even if a==3 or a==6
}
<强> EDIT2 强> 如果你想让循环从1到10,这也是可能的:
int a=1,total=0;
while (a <= 10)
{
switch (a)
{
case 3:
break;
case 6:
break;
default:
total = total + a;
}
// in every case you will get here; even if a==3 or a==6
a++;
}