簡體   English   中英

使用getline從輸入文件流中讀取字符串和數字

[英]reading strings and numbers from input file stream using getline

我得到了getline(ifstream foo, string bar)函數的語法,我知道它的第三個參數是定界符,設置為'\\ n'。

我有一個文件要讀取,並且在第一和第二列上都有數字。 問題在於,在第三列上,我必須閱讀可能包含空格的國家/地區的名稱。

我已經檢查過我的代碼是否可以肯定地從前兩列中成功讀取數字,但是當我的代碼嘗試讀取國家/地區名稱時,我收到了'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,那么很容易檢查這一點。

我查找了有關此主題的所有可用資源,但到目前為止,找不到能解決此問題的資源。

請指教。

您的循環條件錯誤。 您只能在兩個值都為true時循環。 如果其中任何一個為假,則應停止。 因此|| 實際上應該是&&

您還遇到了超出范圍的問題。 i < 51的條件是錯誤的。 值50的i會溢出你的陣列時,您對其進行索引。 因此正確的條件是i < 50

最后, eof不是流中導致您停止閱讀的唯一條件。 只需使用流的布爾運算符即可。

for( int i = 0; ifstr && i < 50; i++ )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM