鹏哥花了点时间教大家投资
fread返回值是真实读到的元素个数
while(fread(&s,sizeof(struct S),1,fp)
{
//
}
课后扩展mySQL
fseek
ftell
int pos = ftell(fp); //文件指针相对于起始位置的偏移量
rewind(fp); //让文件指针回到起始位置
feof // EOF——文件结束标志(-1)空文件读到的就是-1
perror("string:error");
C 库函数 - ferror()
在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。
它的一般调用形式为 ferror(fp);如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,均产生一个新的ferror函 数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0。
吗呀!
这个查错查了半天:
while( i = fgetc(fp) != EOF)
调试i一直是1,搞了半天,这么低级的错误
赋值运算优先级是最低的,只比逗号表达式高。
int i = 0;
FILE *fp = fopen("test2.txt","r");
if(!fp) perror("open text2.txt");
while( (i = fgetc(fp)) != EOF) //fgetc()返回值是int型是因为还要返回-1
{
putchar(i);
}
if(ferror(fp)) //ferror(fp)返回非零值表示读取失败
{
printf("ferror");
}
else if(feof(fp)) //feof(fp)检测流上的文件结束符,如果文件结束,返回非零
{
printf("\tend of file.\n");
}
fclose(fp);
fp = NULL;