#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()循环三次, 可只准读入两行. 为什么?
因為在你輸入
n
之後又輸入了換行符,而cin >> n;
只會讀入到換行之前,所以在第一次執行循環中的getline(cin, s);
時,會把輸入n
之後又輸入的那個換行符號讀入,所以會覺得少讀入了一行。你可以比較以下兩個不同的輸入就能明白了:
輸入一
輸入二