我似乎无法想出一大堆代码来捕获用户,直到它得到一个肯定的int并且如果用户意外地输入一个字符或随机垃圾如"-1-3-4-39-32xfi3"则提示用户/".我只需要一个整洁的防故障cin循环结构,无法搞清楚.谢谢.
我只是想知道其他人在控制台输入方面做了什么,以便从中得出绘制的想法.如何绕过糟糕的输入.
做这个:
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <string>
int main()
{
for (std::string line; std::getline(std::cin, line); )
{
std::istringstream iss(line);
unsigned int n;
if (!(iss >> n >> std::ws) || iss.get() != EOF)
{
std::cout << "Bad input ('" << line << "'), ignoring.\n";
continue;
}
std::cout << "Success! We read: " << n << "\n";
return EXIT_SUCCESS;
}
std::cout << "Premature end of input!\n";
return EXIT_FAILURE;
}
Run Code Online (Sandbox Code Playgroud)
换句话说,继续读取用户的输入,直到您能够将输入解析为所需的数据类型.我选择了基于行的处理,这通常是最自然的,但是如果不正确就可以跳过任何"记录"的概念.请注意,程序可能永远不会成功,即如果用户拒绝提供任何好的输入.