2014-09-24 48 views
-1

您好,我在理解Ifstream和Ofstream時有點麻煩。我想從所謂的「thefile.txt」預製的文件,其中包含導入文本:Ifstream和Ofstream問題

Google (GOOG) 
522.01 2 100 
520.66 1.5 80 
Apple (AAPL) 
389.27 2 150 
401.82 1.8 150 
Microsoft (MSFT) 
25.06 2.5 100 
25.07 2 80 

這裏是代碼塊:

fin.open(inputfile); 
fin >> stockname1 >> buyingcost1 >> commission1 >> shares1 >> sellingcost1 >> sellingcomish1 >> sharessold1 
    >> stockname2 >> buyingcost2 >> commission2 >> shares2 >> sellingcost2 >> sellingcomish2 >> sharessold2 
    >> stockname3 >> buyingcost3 >> commission3 >> shares3 >> sellingcost3 >> sellingcomish3 >> sharessold3; 
fin.close(); 

一切都正確聲明,我有「#」收錄所有需要包含的內容,但是當我嘗試訪問變量時,它們都是空的。

+3

我們需要更多信息。請添加變量聲明。你也沒有檢查'fin'是否仍然是'good()'(或者在'open()'之後)。 – 2014-09-24 09:50:42

+0

最有可能的是該文件不存在於您的工作目錄中。一個好的第一步是驗證文件是否成功打開。將你的輸入封裝在'if(fin)'條件中,在'else'分支中輸出錯誤信息。 – molbdnilo 2014-09-24 09:51:12

+0

好吧,把代碼段中的整個程序扔掉都行嗎? – HalpMehPlz 2014-09-24 09:51:28

回答

3

對於字符串,operator >>逐字讀取。 stockname必須使用std::getline

(我假設輸入文件被成功打開)

所以你做的事:

std::getline(fin, stockname1); 
fin >> buyingcost1 >> commission1 >> shares1 >> sellingcost1 >> sellingcomish1 >> sharessold1; 
// skip until EOL so next getline() reads the right thing 
fin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

Demo

+0

我如何在像我這樣的列表中使用它?它會是std :: getline(fin,stockname1); – HalpMehPlz 2014-09-24 09:59:15

+0

@HalpMehPlz是的 – 2014-09-24 10:05:49

+0

仍然沒有得到任何打印和程序進入if(fin) – HalpMehPlz 2014-09-24 10:13:49

0

我覺得你的程序無法打開file.According你的代碼,我猜測stockname1是一個字符串。如果文件成功打開,stockname中應該有一些東西。要檢查問題,第一步是添加if(fin)條件並在分支中輸出某些內容以進行調試。安東·薩文提到的錯誤也存在。

0

我推測這個問題可能是「fin.open(inputfile);」或許「fin.open(inputfile,ios :: in);」會工作?
(用於輸入,如果您還需要輸出,然後使用「的ios ::在|的ios ::出來」,正確的信息下面的鏈接)


這可能是問題的另一件事是(對於例如)「Google(GOOG)」,因爲據我所知,「>>」輸入以與新行相同的方式解釋空間。 正如別人提到的,「getline。()」讀取整行(儘管我知道是一個字符串)

我個人發現this在學習基本的C++文件處理時非常有幫助。