我得到getline(ifstream foo, string bar)
函數的語法,我知道它的第三個參數是分隔符,它被設置爲'\ n'。使用getline從輸入文件流中讀取字符串和數字
我有一個文件要讀取,它有第一和第二列的數字。 問題是在第三列中,我必須讀取可能包含空格的國家的名稱。
我檢查過我的代碼是成功地從前兩列中讀取數字的,但是當我的代碼嘗試讀取國家名稱時,出現'Segmentation fault (cord dumped)'
錯誤消息。
我的代碼如下所示:
string name[50];
double year1[50],year2[50];
fstream ifstr;
ifstr.open("thefile.csv");
for (int i=0; (!(ifstr.eof())) || i < 51; i++) {
ifstr >> year1[i] >> year2[i];
getline(ifstr, name[i]);} // expecting this line to be reading/storing
//anything that comes after 3rd column into string array
我分配給定的變量是太漫長而複雜,讓我有種寫道,以幫助可讀性,但是這一條線是相當多的問題。
從說明書,我的教授提到
閱讀羣體很簡單,並且可以使用我們課堂上的 標準文件IO函數來完成(即「>>」使用 輸入流)。但是,由於某些國家/地區的名稱包含 空格,因此我們需要在名稱字段中使用getline而不是>>。 幸運的是,這個國家是最後一個領域,所以我們可以用「>>」來讀取 人羣,然後用getline來完成這一行。 您需要輸入數據直到文件結束。回想一下,如果文件結束,getline的返回值是false,所以它的 很容易檢查。
我查了一下所有關於這個主題的資源,但是我找不到解決這個問題的人。
請指教。
你的組合['而(!EOF)'](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-錯誤)反模式,並且讀出界限(例如,訪問'year1 [50]'是未定義的行爲)。 – user657267