C++ 标准:cin不';t在输入错误时引发异常
我只是想写一个简单的程序,从cin读取数据,然后验证输入是否为整数。如果它这样做,我将打破我的while循环。如果没有,我将再次要求用户输入 我的程序编译和运行都很好,这很好。但如果我输入非数值,它不会提示输入新内容。有什么好处C++ 标准:cin不';t在输入错误时引发异常,c++,visual-studio-2012,error-handling,C++,Visual Studio 2012,Error Handling,我只是想写一个简单的程序,从cin读取数据,然后验证输入是否为整数。如果它这样做,我将打破我的while循环。如果没有,我将再次要求用户输入 我的程序编译和运行都很好,这很好。但如果我输入非数值,它不会提示输入新内容。有什么好处 #include <iostream> using namespace std; int main() { bool flag = true; int input; while(flag){ try{
#include <iostream>
using namespace std;
int main() {
bool flag = true;
int input;
while(flag){
try{
cout << "Please enter an integral value \n";
cin >> input;
if (!( input % 1 ) || input == 0){ break; }
}
catch (exception& e)
{ cout << "Please enter an integral value";
flag = true;}
}
cout << input;
return 0;
}
#包括
使用名称空间std;
int main(){
布尔标志=真;
int输入;
while(旗帜){
试试{
cout>输入;
如果(!(输入%1)|输入==0){break;}
}
捕获(例外和e)
{coutC++iostreams不使用异常,除非您告诉它们使用异常
但是您的代码流毫无例外地更加自然。只需执行if(!(cin>>input))
等操作即可
再次尝试之前,请记住清除故障位
整个事情可以是:
int main()
{
int input;
do {
cout << "Please enter an integral value \n";
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while(!(cin >> input));
cout << input;
return 0;
}
intmain()
{
int输入;
做{
输入);
cout不要使用使用名称空间std;
而是导入您需要的内容
最好一次输入一行。如果一行有多个单词,或者在键入任何内容之前按enter键,这会使行为更加直观
#include <iostream>
#include <sstream>
#include <string>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
using std::flush;
using std::getline;
using std::istringstream;
using std::string;
int main() {
int input;
while (true)
{
cout << "Please enter an integral value: " << flush;
string line;
if (!getline(cin, line)) {
cerr << "input failed" << endl;
return 1;
}
istringstream line_stream(line);
char extra;
if (line_stream >> input && !(line_stream >> extra))
break;
}
cout << input << endl;
return 0;
}
#包括
#包括
#包括
使用std::cerr;
使用std::cin;
使用std::cout;
使用std::endl;
使用std::flush;
使用std::getline;
使用std::istringstream;
使用std::string;
int main(){
int输入;
while(true)
{
(额外费用)
打破
}
默认情况下,标准流不会在失败时引发异常。如果要针对特定流失败引发异常,请选中。if(!(输入%1)|输入==0){break;}
编写中断还有很长的路要走;
也有关系:谢谢,我已经习惯了Java。我已经更新了我的问题,我的循环仍然没有在应该的时候中断?@AdamJ:没有有意义的测试来测试输入是否是整数。不,真的,它的数据类型禁止它是任何其他类型。核化if(!(输入%1)| |输入==0)
或if((输入/1!=input)| |(输入==0))
或您想象的任何内容。input
是一个整数。即使用户键入的内容不是整数,input
也是一个整数-cin
被标记为失败,您可以从if(!cin)知道这一点或而(!cin)