今天在写C语言课设读入文件时遇到的一个文件开头字符无法读入问题
txt中的数据内容为
Ben 3118007419 外国语学院 电子信息工程专业 123456 100.000000 0 0
// A code block
FILE *fp;
Card data;
// An highlighted block
if(fgetc(fp) == EOF)
{
printf("数据库为空!无法读取!\n");
return;
}
while (fgetc(fp) != EOF)
{
//if (fgetc(fp) != '\n') fseek(fp, -3, SEEK_CUR);//fgetc()函数对文件指针进行了移位,使用fseek()函数将指针恢复至文件开头
fscanf(fp, "%s\t%s\t%s\t%s\t%s\t%f\t%d\t%d\n", data.name, data.number, data.academy, data.major, data.password, &data.money, &data.loss, &data.lock) ;
InsertNodeByHead(headNode, data);
i = 1;
}
用以上代码结果输出的内容为
n 3118007419 外国语学院 电子信息工程专业 123456 100.000000 0 0
开头2个字母都没了!
原因是因为fgetc()函数一共执行了2次,每执行一次都会向后移动一位,所以输出才只剩一个n
于是取消掉注释中的语句。
// An highlighted block
if(fgetc(fp) == EOF)
{
printf("数据库为空!无法读取!\n");
return;
}
while (fgetc(fp) != EOF)
{
if (fgetc(fp) != '\n') fseek(fp, -3, SEEK_CUR);//fgetc()函数对文件指针进行了移位,使用fseek()函数将指针恢复至文件开头
fscanf(fp, "%s\t%s\t%s\t%s\t%s\t%f\t%d\t%d\n", data.name, data.number, data.academy, data.major, data.password, &data.money, &data.loss, &data.lock) ;
InsertNodeByHead(headNode, data);
i = 1;
}
fp为文件指针,-3表示指针向前偏移3位(因为if条件语句中执行多了1次),SEEK_CUR是当前指针位置,所以使用完fseek()函数后,指针重新回到了文件开头。
输出结果如下
Ben 3118007419 外国语学院 电子信息工程专业 123456 100.000000 0 0