StreamとEOF
1.EOFはCコードの中で1つのマクロで、1つの負数で、普通は-1です;
EOFはgetcまたは関数cinに用いる.getなどの関数の戻り値:ファイルにはASCIIコード-1(または255)の文字がありますが、印刷は文字化けしています.ただし、getcなどの関数は'xFF'(-1)と読み、-1ではなくシンボル整数255を返します.-1はファイルの末尾に読み返されます.ここで-1は文字ではなく、対流設定end-of-fileインジケータです.(getcは読み出された文字をchar->intに変換しました.)
2.EOFはストリームの中にend-of-file indicatorであり、ファイルの末尾に着いたかどうかを示し、ASCIIコードを表していない.
3.キーボード入力EOFは、ストリームの終了を表し、ファイルストリームと同じである.
UNIX/LINEUX下CTL+D
Windows下CTL+Z
4.end-of-file IDをいつ設定するか
gets,istream::getlineなどの関数のように順番に読み、ファイルの末尾まで読んだ場合、読み込んだ文字列に内容があり、ファイルの末尾に達してもend-of-fileは設定されず、もう一度ファイルを読み、何も読めなかった場合にend-of-fileが設定されます.したがって,端末の場合はCTL+Dを2回押す必要があり,1回目の場合は前に未読の内容があるためend-of-fileは設定されていない.
freadとistream::read関数は、ファイルの最後に読むとすぐにend-of-fileが設定されます.
EOFはgetcまたは関数cinに用いる.getなどの関数の戻り値:ファイルにはASCIIコード-1(または255)の文字がありますが、印刷は文字化けしています.ただし、getcなどの関数は'xFF'(-1)と読み、-1ではなくシンボル整数255を返します.-1はファイルの末尾に読み返されます.ここで-1は文字ではなく、対流設定end-of-fileインジケータです.(getcは読み出された文字をchar->intに変換しました.)
int main(){
16 FILE *f = fopen("test", "w+");
17 signed char sc[] = "hello\xff\xfe\xfdworld
";
18 fprintf (f, "%s", sc);
19 fflush(f);
20 fseek(f, 0, SEEK_SET);
21 while(!feof(f)){
22 printf ("%d
", fgetc(f));
23 }
24 fclose(f);
}
2.EOFはストリームの中にend-of-file indicatorであり、ファイルの末尾に着いたかどうかを示し、ASCIIコードを表していない.
3.キーボード入力EOFは、ストリームの終了を表し、ファイルストリームと同じである.
UNIX/LINEUX下CTL+D
Windows下CTL+Z
4.end-of-file IDをいつ設定するか
gets,istream::getlineなどの関数のように順番に読み、ファイルの末尾まで読んだ場合、読み込んだ文字列に内容があり、ファイルの末尾に達してもend-of-fileは設定されず、もう一度ファイルを読み、何も読めなかった場合にend-of-fileが設定されます.したがって,端末の場合はCTL+Dを2回押す必要があり,1回目の場合は前に未読の内容があるためend-of-fileは設定されていない.
freadとistream::read関数は、ファイルの最後に読むとすぐにend-of-fileが設定されます.