我正在测试以下程序,其中涉及两个输入,第一个是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。
答案 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
。