2013-09-28 170 views
-2

大家好,我正嘗試從C++中的文件中讀取數據。我是新來的C++,但從文件測試程序實踐一個簡單的讀取。我的程序編譯,但是當我從一個文件讀取時,它會在屏幕上顯示一堆垃圾。以下是我的代碼:需要幫助從文件讀取。 C++

#include <iostream> 
#include <fstream> 

int main() 
{ 
    ifstream infile; 
    char File[20]; 
    cout<<"Please enter file name: "<<endl; 
    cin>>File; 
    string sym; 
    double o_price, h_price, l_pprice, c_pprice, c_price; 
    int o_shares; 

    infile.open(File); 

    if(!infile.is_open()) 
    { 
     cout<<"The file cannot be open"<<endl; 
    } 

    while(!infile.eof()) 
    { 
     infile>>sym>>o_price>>c_price>>h_price>>l_pprice>>c_pprice>>o_shares; 
     cout<<sym<<o_price<<c_price<<h_price<<l_pprice<<c_pprice<<o_shares; 
    } 
    infile.close(); 
    return 0; 
} 

請我需要幫助,因爲我想了解這個概念。 對於缺少的語法感到抱歉。 輸入文件包含: ABC 120.09 123.11 134.45 124.34 36.67 10000

下面是在屏幕上顯示的輸出:! P =環R {[CONTENT_TYPES] .xml000000e?。

+3

你錯過了一半的代碼,在這裏。什麼是「sym」,「o_price」等?你也沒有顯示文件中的內容。 –

+0

此代碼不會按給定的方式編譯。您需要發佈完整且完整的源代碼。 –

+0

對不起,我確實聲明這些變量只是忘記將它們添加到代碼中。但我編譯,它仍然在屏幕上顯示垃圾。 – Emy

回答

0
#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    ifstream infile; 
    char File[20]; 
    cout<<"Please enter file name: "<<endl; 
    cin>>File; 
    infile.open(File); 

    if(!infile.is_open()) 
    { 
     cout<<"The file cannot be open"<<endl; 
    } 

    string sym; 
    double o_price, h_price, l_pprice, c_pprice; 
    int o_shares; 
    infile>>sym>>o_price>>h_price>>l_pprice>>c_pprice>>o_shares; 
    cout<<sym<<" "<<o_price<<" "<<h_price<<" " 
     <<l_pprice<<" "<< c_pprice<<" "<<o_shares<< endl; 

    infile.close(); 
    return 0; 
} 
+1

這不可能是正確的,OP說代碼編譯,它不會出現這些錯誤。發佈的代碼一定是壞的。 –

+0

它不會編譯這些項目丟失。 –

+0

對不起,我已經宣佈了你們正在談論的變數,但忘記寫出來。它編譯但在屏幕上顯示垃圾。 – Emy

1

您需要在使用它之前定義或聲明變量。 但是,在您的程序中,sym, o_price, h_price, l_pprice, c_pprice, o_shares未定義或未聲明。 Cpp是一種靜態語言,您需要遵守規則。

+0

我確定他們只是忘了寫出來。抱歉忘記了。 – Emy

0

嘗試修改此:

if(!infile.is_open()) 
{ 
    cout<<"The file cannot be open"<<endl; 
} 

這樣:

if(!infile.is_open()) 
{ 
    cout<<"The file cannot be open"<<endl; 
    return 0; 
} 

當你擁有了它,現在,你檢查文件是否被成功打開,但如果它不是,你只是繼續你的程序。如果文件沒有正確打開,您不想這樣做,因爲它會繼續讀取(不成功)並永久打印垃圾值。

而且,這樣的:

while(!infile.eof()) 

是不是要走的事情以正確的方式,因爲後你試圖讀到文件的最後,你只會得到EOF,所以它我會一直嘗試閱讀(在你的情況下,打印)一次超過你想要的。

+0

我的確如你所說的保羅,但它仍然在屏幕上顯示相同的垃圾 – Emy

+0

我沒有使用while循環,但仍得到相同的結果。 – Emy