亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C++中eof是什么意思?

在C++中eof是什么意思?

慕尼黑的夜晚無繁華 2019-05-09 11:07:55
在這個程序中#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呢?
查看完整描述

3 回答

?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

eof 就是文件結束
因為文件指針到最后一個字符時并不會觸發eof,再讀一次讀不到數據才觸發eof,這樣c還保留著上一次的數據,又被輸出一次,peek()方法是讀取文件指針下一個位置的值,但并不移動文件指針,用在這里很合適

#include<iostream>
#include <fstream>
using namespace std;
void main()
{
fstream io;
char c;
io.open ("a.txt",ios::in);
while (io.peek()!=EOF) //這樣判斷
{
io>>c;
cout<<c;
}
cout<<endl;
io.close();
}



查看完整回答
反對 回復 2019-05-13
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

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的主要原因。



查看完整回答
反對 回復 2019-05-13
?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

C++ eof()函數可以幫助我們用來判斷文件是否為空,抑或是判斷其是否讀到文件結尾。
在C語言中,或更精確地說成C標準函式庫中表示文件結束符(end of file)。在while循環中以EOF作為文件結束標志,這種以EOF作為文件結束標志的文件,必須是文本文件。在文本文件中,數據都是以字符的ASCII代碼值的形式存放。我們知道,ASCII代碼值的范圍是0~255,不可能出現-1,因此可以用EOF作為文件結束標志。
具體用法看一下代碼:
int c,n;

int array[1000];
while (scanf("%d",c),c!=EOF)//從控制臺輸入數據,直到輸入eof為止
{
array[n++]=c;

}

查看完整回答
反對 回復 2019-05-13
  • 3 回答
  • 0 關注
  • 1784 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號