在第33行,有一个中断来阻止代码无限期重复,但我希望它能参与input
。
守则:
while loop
如果你们能帮助我找到为什么会重复,那真的会有所帮助。
答案 0 :(得分:1)
您需要在for循环后添加break
语句才能退出循环。没有break
for循环将执行并打印输出,然后控制将落到while循环的末尾,它将在循环的顶部开始。
我还建议您将if (cin.fail())
更改为仅else
,因为您已经在检查if (!cin.fail())
。如果要再次循环,还需要忽略输入的其余部分并清除错误标志。
你在while循环中还有一组额外的括号。通过这些更改,您的代码将是:
#include <iostream>
#include <limits>
using namespace std;
int main()
{
while (true)
{
cout << "This program counts by twos to any number that is inputted by the user." << endl;
cout << "Input an even number to start counting." << endl;
int input;
cin >> input;
if (!cin.fail())//fails if input is not an integer
{
if (input < 0)//makes sure all numbers are positive
{
cout << "That is not a positive number. Try again?" << endl;
}
else if (input % 2 != 0) // makes sure all numbers are even
{
cout << "That is not an even number. Try again?" << endl;
}
else{
for (int i = 0; i <= input; i += 2) //uses a for loop to actually do the counting once you know that the number is even.
{
cout << i << endl;
}
break; // exit the while loop
}
}
else //else when you input anything other than an integer.
{
cout << "That is not a digit, try again." << endl;
cin.clear(); // reset the error flags
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // clear any extra input
}
}
return 0;
}
答案 1 :(得分:0)
根据您打印的错误消息,我猜您的问题是您希望让用户有机会再次尝试输入数字,但在一次失败后,无论您输入什么,它都会一直失败。如果是这种情况,请将break
替换为cin.clear()
。这将告诉流您已从错误中恢复并准备好接收更多输入。
但是,如果您要这样做,您的程序现在没有退出条件,因此您需要在for循环之后添加break
(或return 0
)。