Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 标准:cin不';t在输入错误时引发异常_C++_Visual Studio 2012_Error Handling - Fatal编程技术网

C++ 标准:cin不';t在输入错误时引发异常

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{

我只是想写一个简单的程序,从cin读取数据,然后验证输入是否为整数。如果它这样做,我将打破我的while循环。如果没有,我将再次要求用户输入

我的程序编译和运行都很好,这很好。但如果我输入非数值,它不会提示输入新内容。有什么好处

#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)