2016-02-28 97 views
1

我不知道函數int get()和istream有什麼不一樣get32(& c) 我有這樣的代碼。這是一個無限循環。但是,如果我使用ch = File.get()而不是File.get(ch),那很好。告訴我原因。函數int get()和istream&get(char&c)有什麼區別

fstream File("input.txt", ios::in | ios::out); 
char ch; 
while (1) 
{ 
    File.get(ch); 
    //ch = File.get(); 
    cout << ch; 
    if (ch == EOF) break; 
} 

回答

2

here

讀取一個字符,如果可用返回。否則,返回Traits::eof() ....

當讀取失敗時,不帶參數的重載將返回EOF。其他重載不會影響傳遞的參數,只是將流設置爲失敗狀態(第一次重載也會這樣做)。既然你從不檢查流的狀態,你的循環會一直持續下去。

您可以將循環更改爲while (File.get(ch)),並在到達文件末尾時終止。

+0

對不起!我無法理解你的答案。你能再解釋一遍嗎? –

+0

'File.get(ch)'在到達EOF時不會將'ch'設置爲任何值,它只是改變'File'中的一些變量。 'File.get()'_will_除了改變這些變量外,還會在EOF結束時返回EOF。 –

-2

get()是一個函數,它返回一個必須使用equals(賦值)運算符分配的整數。

istream是一個類,它有一個名爲get()的方法,該方法使用參數& c並放置一個字符。

他們是不一樣的get(),但做類似的事情

做事的功能的方式很好,但如果你想學習做事使用該類方式的面向對象的方式,和當你在兩方面都有經驗時,你可以決定哪種方式適合完成任務。

+0

它們都是'basic_istream'中'get'的重載。這並不回答爲什麼一個重載導致無限循環而另一個不重載的問題。另外,運算符重載是函數,C++不是OOP語言,它是支持OOP等的多範式語言。 –

+0

多範式可以使用函數或類方法來實現事物。 io函數在stdio.h中定義,而io類方法在stream.h中定義(#include ),它本身包含stdio.h,沒有include流只有C函數可用。 –

相關問題