2014-06-13 57 views
0

我一直在試圖執行什麼應該是從文件中讀取一行文本並將其保存到數組中的相對簡單的任務。不幸的是,這只是沒有工作,而是簡單的程序根本不讀任何東西。這是哪門子的代碼,我想使用:從文件讀入數組C++

ifstream in_stream; 
int x=0; 
string array[150] 
in_stream.open("file.txt"); 

while(!in_stream.eof()){ 
    in_stream>>array[x]; 
    x++; 
} 

我也試圖用如下函數getline:

ifstream in_stream; 
int x=0; 
string array[150] 
in_stream.open("file.txt"); 

while(!in_stream.eof()){ 
    getline(in_stream, array[x]); 
    x++; 
} 

無論模式下工作,也不會讀任何東西放入數組而是葉子它空白... 我只是不知道什麼是錯的,所以如果有人可以幫助那將是盛大的!

+0

作爲一個附註,你應該使用'std :: vector'而不是數組。然後,你不必擔心文件的大小。 – crashmstr

+0

在這兩個示例中,'string array [150]'後面都缺少分號。 – Cameron

+0

我不認爲這是導致你有問題,但在做in_stream >> array [x]之前檢查EOF;也不保證該操作將起作用。你應該檢查你是否已經成功讀取了數據。 –

回答

0

看,這是我的file.txt的內容:

ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 

10行準確

,這就是存儲在尺寸== 20的陣列的數據:

ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 

10行太!

如果使用getline,則每行將被存儲到陣列中的某個位置。如果文件的大小不夠大和/或數組的大小太大,則只能看到空白空間被打印出來。首先,確保你的數組足夠短或文件的大小足夠大。無論如何,getline的解決方案可以工作。我沒有測試ifstream的解決方案,但情況與第一個類似。

希望它有幫助!

1

它來檢查該文件實際上在嘗試,如果該文件無法打開,你就不會開始填充陣列從中讀出,在你面前的情況下成功打開是很重要的。

正如christianm所說,這是更好地使用一個std ::載體,因爲它可以讓你處理任何大小的文件。因此,我的建議是重構你的代碼如下:

std::ifstream in_stream("file.txt"); 

if(!in_stream.good()) 
{ 
    std::cerr << "Error opening file!" << std::endl; 
    //More error handling code goes here 
} 

std::vector<std::string> lines; 
while(!in_stream.eof()) 
{ 
    std::string line; 
    std::getline(in_stream, line); 
    lines.push_back(line); 
} 

std::cout << "Read: " << lines.size() << " lines." << std::endl; 

有一點要記住的關於ifstream的是,它會打開你傳遞給它在你的測試用例的相對路徑的字符串。這意味着您必須從包含file.txt的同一目錄啓動程序,在程序啓動後更改工作目錄,或者提供完全限定的路徑。