问题描述
#include <iostream>#include <cstdio>#include <vector>#include <string>#include <sstream>using namespace std;void print_vector(vector<int>& v) { vector<int>::iterator it; for (it = v.begin(); it != v.end(); it ++) { printf ('%d ', *it); }}int main() { int n, temp; cin >> n; string s; stringstream ss; vector<int> numbers; for (int i = 0; i < n; i++) { getline(cin, s); ss << s << ' '; } while (ss >> temp) { numbers.push_back(temp); } print_vector(numbers); return 0;}
以上代码当输入“3”后, 按理说getline()循环三次, 可只准读入两行. 为什么?
问题解答
回答1:因为在你输入n之后又输入了换行符,而cin >> n;只会读入到换行之前,所以在第一次执行循环中的getline(cin, s);时,会把输入n之后又输入的那个换行符读入,所以会感觉少读入了一行。
你可以比较一下以下两个不同的输入就能明白了:
输入一
312
输入二
3 012