从流式传输cin
到 a string
,创建 a istringstream
,然后从那里流式传输到您的号码是没有意义的:它只会为额外类型的错误留出空间,例如"12x"
被视为12
和x
忽略,而不是为用户生成警告/错误消息。
您可以更直接地阅读如下:
const char* prompt = "\nPlease enter x-coordinate: ";
while (cout << prompt && !(cin >> x))
{
cin.clear();
cin.ignore(256, '\n');
prompt = "Please enter integer: \n";
}
如果不需要更改提示,可以直接放入循环中:
while (cout << "\nPlease enter x-coordinate: " && !(cin >> x))
{
cin.clear();
cin.ignore(256, '\n');
std::out << "Please enter an integer.\n";
}
注意:您会看到有点像您的第一次尝试,其中读取string
使用getline
而不是>>
,这可能是一个很好的做法,因为它可以让您计算行号(对于解析文件比 更有用std::cin
)并检查值出现在行上连同其他预期数据。看起来像这样:
std::string line;
while (std::cout << "Enter coordinate:" &&
getline(std::cin, line))
{
std::istringstream iss(line);
if (iss >> x)
break;
std::cout << "Error - invalid coordinate, please enter an integer\n";
}
...use x...