求大神详解关于 EOF 和‘\032 ’和文件结尾的问题
Ctrl+Z是一个字符,在ASCLL字符集里为十进制26位,疑问1:ASCLL中'26'不就是Ctrl+Z,那他到底是不是文件结尾?如果是文件结尾,那EOF是什么,EOF不是也是文件结尾吗?如果他们同属于文件结尾,那字符Ctrl+Z其实值也为-1?? 在<stdio.h>中 关于EOF的定义#define EOF (-1)
在C Primer Plus P366面有这样一段话,“很多MS-DOS编辑器使用字符CTRL+Z标识文本文件的结尾,如果以文本模式打开这样的文件,C可以认出这个字符是标识文件结尾的字符。可是如果以二进制模式打开这样的文件,只会把Ctrl+Z当作文件中的一个字符。
疑问2:为什么我使用下面的代码并以"r"作为fopen的读取方式时检测不到‘26’,并且以"rb"但是以读取方式时还是检测不到‘26’。 但EOF作为循环条件时检测会成功,
既然二进制模式把Ctrl+Z当作文件中的一个字符,为什么用循环却检测不到Ctrl+Z?
程序代码:#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;
char ch;
if ((fp=fopen("1.txt","rb"))==NULL)
printf("hehe");
while( (ch=getc(fp))!='\032' )
{
putc(ch,stdout);
}
return 0;
}
[ 本帖最后由 hutianlun 于 2014-5-26 20:44 编辑 ]








