随便冰棍
2016-06-04 13:05
采纳率: 100%
浏览 1.5k
已采纳

C语言读取文件出现疑似C盘路径的东西..

发生如下错误
图片说明
以下是部分源代码。。期末的图书管理系统的大作业的= =

typedef struct book
{
char AN[10]; /*登录号*/
char name[20]; /*书名*/
char author[20]; /*作者名*/
char clc[10]; /*分类名*/
char company[20]; /*出版单位*/
char date[20]; /*出版日期*/
char price[10]; /*价格*/
struct book *next;
}Booklist,*Pointer;

int num=0;//全局变量的定义
Pointer Head=NULL;//头指针为空
FILE *fp;//指向文件的指针

void Read()/*读入文本文件的函数*/
{Pointer p,q;
int m=0;
char file[20];
printf("请输入文件路径及文件名:");
scanf("%s",file);
if((fp=fopen(file,"r+"))==NULL)
{
printf("不能打开文件!\n");
return;
}
m=m+1;
if(m==1)
{
p=(Pointer)malloc(sizeof(Booklist));
Head=p;//将p的地址赋给头指针Head
fscanf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",&p->AN,&p->name,&p->author,&p->clc,&p->company,&p->date,&p->price);
do
{num=num+1;//记录书籍信息量
if(num==1) //区别开链表开头与中间的处理方法
Head->next=p;
else q->next=p;
q=p;
p=(Pointer)malloc(sizeof(Booklist));
fscanf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",&p->AN,&p->name,&p->author,&p->clc,&p->company,&p->date,&p->price);//读入文件数据
}while(!feof(fp));//检查文件是否结束,若是则停止读入,否则继续读入
q->next=p;
p->next=NULL;//链表结尾处理
num=num+1;
}
printf("写入数据成功,可返回浏览其信息。");
fclose(fp);
return;
}

void Scan(Pointer Head) //显示图书信息函数
{
Pointer p;
p=Head;
if(p==NULL)
printf("记录为空");//检测是否有图书信息
else
{
printf("\n\t共有%d条记录",num);
while(p!=NULL)
{
printf("\n\n\t\t登录号:%-10s",p->AN);//显示图书信息
printf("\n\t\t书名: %-20s",p->name);
printf("\n\t\t作者名: %-20s",p->author);
printf("\n\t\t分类号: %-10s",p->clc);
printf("\n\t\t出版单位:%-20s",p->company);
printf("\n\t\t出版时间:%-20s",p->date);
printf("\n\t\t价格: ¥%-10s",p->price);
p=p->next;
}
printf("\n\t\t请按任意键回到主菜单");
return;
}
}

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

  • 小灸舞 2016-06-04 13:56
    最佳回答

    在读完文件的最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fscanf()执行读操作,feof()才能探测到文件结尾。这样就多执行了一次。
    单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题