如何在for循环中只运行其中一个if语句?例如,我有一个输入5 ...我只想要它打印五...但每当我运行这个代码,它将执行所有if语句..请帮助我
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
// Complete the code.
int a;
int b;
cin >> a;
for (a = 0; 0<a<10; a++)
{
if (a == 1)
{
cout << "one";
}
if (a == 2)
{
cout << "two";
}
if (a == 3)
{
cout << "three";
}
if (a == 4)
{
cout << "four";
}
if (a == 5)
{
cout << "five";
}
if (a == 6)
{
cout << "six";
}
if (a == 7)
{
cout << "seven";
}
if (a == 8)
{
cout << "eight";
}
if (a == 9)
{
cout << "nine";
}
else if (a > 9 && a%2 == 0)
{
cout << "even";
}
else if (a > 9 && a&2 != 0)
{
cout << "odd";
}
}
return 0;
}
答案 0 :(得分:1)
问题似乎是for
循环。您的程序接受a
的值作为输入,但是一旦循环开始,它会将a
的值重置为0(for (a = 0;...
因此它循环10次,并且每个循环a
将具有不同的值,从0开始到9结束。这意味着所有if
语句都会在某个时刻被命中在执行中,通常在for
周围的每个循环上都有一个。
要获得预期的行为“输入5 ...我只想要打印5”,只需从代码中删除for
循环。
答案 1 :(得分:-1)
您不必要的for
循环会破坏a
的输入值并永远循环!(至少在您的签名类型a
溢出之前)。
您正在将a
替换为for
循环中的计数器!如果您只想要一个输出,请完全删除for
循环。如果要保留for
循环,那么您的表达式0 < a < 10
应该重新设置为0 < a && a < 10
:正式0 < a < 10
将被评估为(0 < a) < 10
true < 10
}或false < 10
总是 true
。
另外,请考虑重构if else
以明确设置互斥语句:
if (a == 1){
cout << "one";
} else if (a == 2){
cout << "two";
/*and so on*/
} else {
/*all other cases*/
}
虽然在这种情况下您可能想要考虑switch
块:
switch (a){
case 1:
cout << "one";
break; // to stop program control flowing into the next case
case 2:
cout << "two";
break;
/*and so on*/
default:
/*all other cases*/
}
答案 2 :(得分:-1)
if () {
} else if () {
}
虽然
switch() {
}
在你的情况下,会更有效率。
更新1
@ Aleph0
以下是解决方案
int main() {
int a;
cin >> a;
switch (a) {
case 1: cout << "one"; break;
case 2: cout << "two"; break;
case 3: cout << "three"; break;
case 4: cout << "four"; break;
case 5: cout << "five"; break;
case 6: cout << "six"; break;
case 7: cout << "seven"; break;
case 8: cout << "eight"; break;
case 9: cout << "nine"; break;
default: cout << ((a & (1 << 31)) ? "negative" : (a & 1) ? "odd" : "even"); break;
}
}
已被要求提出以下问题
我有5个输入...我只想要打印五个
而且,有人在上面已正确提到,for
循环在这里并不重要。