好吧,所以我有一個輸入文件input.txt
,它包含一個CSV序列:1,1,1,2,2,3,3,4,4
我試圖用逗號分隔它;但是我在這裏遇到了一些問題。出於某種原因,序列中的第一個數字甚至沒有被流讀取。爲了表明這一點,我創建了一些調試代碼來查看發生了什麼,並且我發現第一個數字被存儲在csvLine
之內,並且每個其他數字都被讀取和轉換得很好。我不明白爲什麼只有第一個號碼被省略。下面是一個示例圖,顯示我的意思。 num
應該具有相同的確切值和Line
,但事實並非如此。它具有除第一個以外的所有值,它們存儲在csvLine
之內。這是爲什麼發生?!爲什麼C++ StringStream從輸入文件中跳過第一個數字,但是顯示其餘的?
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main(int argc, const char * argv[]) {
ifstream file;
string line;
string csvLine; //comma seperated value line
int num = 0;
file.open(argv[1]);
if(file.is_open()) {
while(getline(file, line)) { //get the whole line and use string stream to break at commas
cout << "\nLine: " << line << endl;
//using stringstream to seperate at commas
stringstream ss(line);
while(getline(ss, csvLine, ',')) {
cout << "csvLine: " << csvLine << " " << endl;
//using stringstream to convert to int
ss >> num;
cout << "num: " << num << " " << endl;
}
}
}
return 0;
}
不要混合'getline'和'>>'。 http://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction – chris 2014-10-26 20:00:33