C ++ I / O流问题:程序要求输入两次或工作不正确

时间:2017-09-07 03:18:30

标签: c++ iostream

我试图编写一个程序,从命令行读取输入为int,如果用户输入int,程序打印"输入是" +如果用户输入错误的类型输入,输出"错误的输入"。 这是我的代码:

#include <iostream>
#include <string>
using namespace std;

int main() {
 int input;
 cout << "Enter an Int:" << endl;
 cin >> input;

 if (!(cin >> input)) {
  cout << "wrong format input" << endl;
  return 1;
 }

 cout << "input is " << input << endl;
 return 0;
}

现在cin >> input;(案例-1)程序在输入正确的整数时要求两次输入;它打印&#34;错误的格式输入&#34;如果用户输入2.2&#39;或者&#39; a&#39;。

没有cin >> input;(case-2)程序在输入正确的整数时要求输入一次; 打印&#34;输入为2&#34;当用户输入2.2&#39;而不是打印&#34;错误&#34;消息,程序打印&#34;输入为2&#34;。

我的代码中哪个部分出错了?我该如何解决这个问题?

对于案例2: enter image description here

2 个答案:

答案 0 :(得分:0)

以下是允许在同一行输入多个整数的示例,但不允许其他任何内容

#include <iostream>
#include <string>

int main()
{
    std::string input;
    while(std::cin >> input){
        size_t last;
        int res;
        bool good = true;
        try{
            res = std::stoi(input,&last);
        }
        catch(...){
            good = false;
        }
        if(!good || last != input.length()){
            std::cout << "Incorrect input: " << input << ", try again.\n";
        }
        else{
            std::cout << "Integer read: " << res << '\n';
        }
    }
    return 0;
}

/***************
Output
$ ./test
2
Integer read: 2
hello
Incorrect input: hello, try again.
2.2
Incorrect input: 2.2, try again.
1111111111111111111111111111111111111111111111111111111111111111111111
Incorrect input: 1111111111111111111111111111111111111111111111111111111111111111111111, try again.
3 4
Integer read: 3
Integer read: 4
^Z
[3]+  Stopped                 ./test
*/

另一个版本 - 使用stringstream

    while(std::cin >> input){
        std::istringstream ss(input);
        int res;
        ss >> res;
        if(!ss){
            std::cout << "Incorrect input: " << input << ", try again.\n";
        }
        else{
            char ch = ss.get();//let's check that no more characters left in the string
            if(!ss){
                std::cout << "Integer read: " << res << '\n';
            }
            else{
                std::cout << "Incorrect input: " << input << ", try again.\n";
            }
        }
    }

答案 1 :(得分:0)

if(!(cin&gt;&gt; input))是第二次输入的原因。就这样做:

#include <iostream>
#include <string>
using namespace std;

int main() {
 int input;
 cout << "Enter an Int:" << endl;
 cin >> input;

 if (cin.fail()) {
  cout << "wrong format input" << endl;
  return 1;
 }

 cout << "input is " << input << endl;
 return 0;
}