2013-07-31 46 views
0

數據我想使用C++ ifstream的一個文本文件,由於某種原因,下面的代碼不工作在數據讀取。該文件包含由空格分隔的兩個數字。但是,這段代碼不會打印任何東西。任何人都可以向我解釋什麼是錯的?ifstream的空白在閱讀時有文件

#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 

void readIntoAdjMat(string fname) { 
    ifstream in(fname.c_str()); 
    string race, length; 
    in >> race >> length; 
    cout << race << ' ' << length << endl; 
    in.close(); 
} 

int main(int argc, char *argv[]) { 
    readIntoAdjMat("maze1.txt"); 
} 
+0

你應該,如果你正確地打開該文件,並且您成功地讀取輸入。從問題描述中,我猜測它無法打開文件。 –

+1

你實際上並沒有檢查文件是否正常打開。它有可能從未打開過? – Borgleader

回答

2

應始終測試與外部實體相互作用在成功的情況:

std::ifstream in(fname.c_str()); 
std::string race, length; 
if (!in) { 
    throw std::runtime_error("failed to open '" + fname + "' for reading"); 
} 
if (in >> race >> length) { 
    std::cout << race << ' ' << length << '\n'; 
} 
else { 
    std::cerr << "WARNING: failed to read file content\n"; 
} 
+0

我覺得無法讀取該文件是錯誤的。不是你應該警告的事情。 –

+0

當使用這個它打印出「警告:無法讀取文件內容\ n」。爲什麼如果不能讀取文件的內容? – user2640052

+0

@ user2640052:如果至少有兩個字符串由文件中的空格分隔,則不應該失敗。您可能需要閱讀並測試各個字段,以查看哪一個導致失敗。 –