带有输入的C++无尽循环
C++ Endless loop with input
我有一个C++程序,它从终端接收输入,由于某种原因,这会产生一个无休止的循环:
double getSideLength()
{
cout << "Enter a side: "
double side;
cin >> side; cin.ignore( 80, 'n' );
while (side <= 0){
cout << "Please enter a valid side. Try again: ";
cin >> side; cin.ignore(80, 'n');
}
return side;
这会产生输出:
Enter a side: invalid
Please enter a valid side. Try again:
Please enter a valid side. Try again:
Please enter a valid side. Try again:
.... and so on. "invalid" is the only input the user made
如operator>>中所述,如果"所获得的输入无法解释为适当类型的元素",则文档流将启用其故障位。如果输入错误的数字,则会发生这种情况。所以您只需要在下一个输入之前清除()cin。这是代码:
double getSideLength()
{
double side;
cout << "Enter a side: ";
cin >> side;
if (!cin)
cin.clear();
cin.ignore( 80, 'n' );
while (side <= 0){
cout << "Please enter a valid side. Try again: ";
cin >> side;
if (!cin)
cin.clear();
cin.ignore( 80, 'n' );
}
return side;
}
这应该可以解决问题。使用!(cin >> side)
将确保我们从cin中获得正确的类型。
double getSideLength()
{
cout << "Enter a side: " << std::endl;
double side = -1;
while ( ! (cin >> side) and side <= 0)
{
cout << "Please enter a valid side. Try again: ";
cin.clear();
cin.ignore(1000, 'n');
}
return side;
}
cin
似乎有很多复杂之处,通常,正如这里所解释的,您最好使用getline,然后使用atoi
。
此外,这里还讨论了无限循环的问题。如果您想使用cin
,可以将输入转换为字符串变量,然后使用atoi
将其转换为整数,如本文所示。
double getSideLength()
{
double side;
getinput:
cout << "Enter a side: "
cin >> side; cin.ignore( 80, 'n' );
if(side <= 0)
{
cout << "Please enter a valid side. Try again: "
goto getinput;
}
return side;
}
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- 无尽的循环
- 无尽的循环分裂矢量
- C vs Java:无尽的循环创建对象仅崩溃C
- C 无尽的循环在树上递归时
- 带有输入的C++无尽循环
- 无尽的include循环
- visualc++进入了无尽的循环