在這個程序中#include<iostream>#include <fstream>using namespace std;void main(){fstream io;char c;io.open ("a.txt",ios::in);while (!io.eof ()){io>>c;cout<<c;}cout<<endl;io.close;}a.txt文本中里面有,abc為什么輸出的是abcc呢?
2 回答
哆啦的時光機
TA貢獻1779條經驗 獲得超6個贊
天涯盡頭無女友
TA貢獻1831條經驗 獲得超9個贊
EOF在C++中的定義為:const int EOF = -1;
它這么定義是有道理的:
舉個例子來說
int ch; //注意:這里定義了ch是int型的,而不是char型的
while((ch = cin.get()) != EOF)
{
cout << ch;
}
cin.get()是讀取輸入流中的一個字節,但是時常忽略的,也是必須注意的是:那些C++的設計者們將cin.get()設計成返回int型,而不是char型,這不是令人挺奇怪的嗎?感覺char ch = cin.get()比較順其自然吧?原因就是為了能夠使cin.get()能夠返回一個EOF。
因為對于一個字節的長度,已經定義了256個字符了,即擴展的ASCII碼,已經不能再弄出一個字節表示EOF了,而且對于上面的程序,我們如果256個字符都得用,那么拿什么與這些字符比較去結束這個循環呢?
那些設計者門將cin.get()讀取的char型提升為一個int型,那么肯定是正的,然后EOF定義為-1,在windows下的ctrl+z表示輸入EOF,即輸入ctrl+z的時候cin.get()才等于-1,其余的字符輸入的時候cin.get()是一個正數。這是設計者門提供EOF的主要原因。
- 2 回答
- 0 關注
- 879 瀏覽
添加回答
舉報
0/150
提交
取消
