我想让用户输入至少一个字符,也可能是一个int值,然后读取它(忽略空格)。如果输入的数据格式不正确,我想抛出一个错误。实现这一目标的最简单方法是什么?
示例:
> Enter character and number:
(1) b //should be fine (without space)
(2) b //should also be fine (with space after b, "b ")
(3) b 1 //should also be fine
(4) b 1 n //should not be ok
(5) b b //should not be ok
我使用过这样的东西:
cout << "Enter a character and number: ";
cin >> myChar;
if (cin.peek() == ' ')
cin >> myInt;
if (myInt < 1)
{
throw myError;
myInt = 1;
}
但它无法处理b b条目。或“b”条目。
这似乎是一个相当容易和常见的问题,但我一直无法为此找到一个干净的解决方案.. 是否存在用于从用户读取多个参数的“标准方法”,具有预定义的数据类型顺序?
非常感谢协助!
编辑:这是较大的计算机练习的一小部分,显然这是告知这些事情的正确行为。
所以我最终使用了字符串解析建议。解决方案似乎仍然过于复杂。如果有人偶然发现这个帖子,我会把它留在下面。
getline(cin, inputString);
istringstream iss(inputString);
iss >> myChar;
iss.peek(); // needed to trigger EOF.
if (iss.fail())
throw myError("unexpected error\n");
if (iss.eof())
myInt = 1;
else
{
iss >> myInt;
if (iss.fail())
throw myError("Incorrect input, no int\n");
ws(iss);
if (!iss.eof())
throw myError("Incorrect input, not end of line.\n");
}
cin.clear();