来自Bash的两个C ++ cin输入

时间:2017-01-19 04:40:39

标签: c++ bash

我正在测试以下程序,其中涉及两个输入,第一个是int的向量,第二个是int。
main.cpp文件如下:

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

void print(vector<int> & vec) {
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) 
        cout << *it << " ";
    cout << endl;
}

int main() {
    vector<int> nums{}; 
    int i;
    int target;

    cout << "Please enter a vector of integers:\n";
    while (cin >> i) {
        nums.push_back(i);
    }
    cout << "Vector of Integers:" << endl;
    print(nums);
    cin.clear();
    cout << "Please enter an integer:" << endl;
    cin >> target;
    cout << "Checking whether " << target << " is in the vector...\n";
    if (find(nums.begin(), nums.end(), target) != nums.end()) {
        cout << "Target found!\n"; 
    }
    else {
        cout << "Target not found!\n"; 
    }
    return 0;
}

Bash脚本

$ g++ -std=c++11 main.cpp

编译我的代码并在文件夹中创建一个a.exe。 接下来,我尝试在Bash中打开它:

$ ./a.exe

然后我用向量nums = {1,2,3}测试它,结果发现第二个cin被跳过,如下所示。

Please enter a vector of integers:
1 2 3 EOF
Vector of Integers:
1 2 3
Please enter an integer:
Checking whether 0 is in the vector...
Target not found!

但是,如果我在没有Bash终端的帮助下直接打开a.exe,这不是问题。那么是否可以进行一些更改以便在Bash下顺利运行?
提前致谢!
附:我使用的是Win7。

1 个答案:

答案 0 :(得分:0)

如果输入字面上是

1 2 3 EOF

您的程序成功读取1,2和3。它无法读取EOF。之后,除非您采取措施清除cin的错误状态并添加代码以阅读并放弃EOF,否则它不会读取任何内容。

您可以使用cin.clear()cin.ignore()。您有cin.clear(),但仍会在流中留下EOF。您需要添加一行以从输入流中丢弃该行。

cout << "Please enter a vector of integers:\n";
while (cin >> i) {
    nums.push_back(i);
}
cout << "Vector of Integers:" << endl;
print(nums);
cin.clear();

// Need this.
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

cout << "Please enter an integer:" << endl;
cin >> target;

添加

#include <limits>

能够使用std::numeric_limits