2012-11-12 70 views
1

可能重複:
Manipulate Input File Stream如何重載CIN讀取文件

C++如何重載CIN讀取文件

我試圖用運算符重載以下..

struct myself 
{ 
string myname; 
} 

istream &operator>> (istream &stream, myself &mm) 
{ 
cout << "Enter my name:"; 
stream >> mm.myname; 
return stream; 
} 

int main() 
{ 
myself mm; 
cin >> mm; 

cout << mm.myname; 

} 

及其工作,能夠迴應我實際輸入的內容。

現在我想用

cout << "Enter file name to read: "; 

//assume user type myfile.txt 

cin >> readFile; 

我如何重載我CIN,使其讀取文件進行。

考慮我的文件是一樣的東西,它包含類似

Map2D, [3, 2] 
Dot3D, [25, -69, -33], [-2, -41, 58] 
Map3D, [6, 9, -50] 
Map2D, [3, 2] 
Dot3D, [7, -12, 3], [9, 13, 68] 
Map3D, [6, 9, 5] 
Map2D, [3, 2] 
Dot3D, [70, -120, -3], [-29, 1, 268] 
Dot3D, [7, 12, 3], [-9, 13, 68] 
Map3D, [1, 3, 8] 
Dot2D, [5, 7], [3, 8] 

然後數據

sometextdocument.txt我想cout << "Number of records read: " << number << endl; 然後做一回流,我怎麼超載它爲CIN讀取工作文件

+0

在operator&<<(fname)函數中放置文件的讀取代碼 –

+0

@GrijeshChauhan您可以詳細說明operator&<<(fname)函數中的文件讀取代碼,如果能夠顯示大量的示例代碼, 。 – user1777711

+0

你爲什麼要改變'cin'的行爲?爲什麼不打開一個新的文件流? – meagar

回答

-2

嘗試像這樣:希望這將有助於

istream &operator>> (istream &in, char* fname){ 
    inFile.open(fname); 
    char ch1; 
    while (inFile.get(ch1)) { 
     cout<<ch1; 
    } 
} 
+1

[爲什麼iostream :: eof內循環條件被認爲是錯誤的?](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-認爲是錯誤的) – jrok

+1

您的解決方案是忽略輸入流,[循環'.eof()'](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition -considered-wrong),並嘗試返回0而不是'istream&'?對不起,但這完全破碎了。 – Blastfurnace

+0

@Blastfurnace請幫忙編輯答案,以及我如何cout並要求用戶輸入,假設他輸入mytext.txt,我如何與他的輸入cin,因此它承認作爲文件名。 – user1777711