楼主你在进行文件操作的时候全部是按照 txt 格式进行的操作,所以打开文件的时候没必要用 b。
虽然在这里对文件操作没有任何影响,但是代码读起来会比较别扭。
下面咱们来分析一下你的代码
如果楼主以前用 fwrite() 进行过文件操作,把之前生成的文件删掉,重新写一个文件。
因为 fwrite() 写的文件用 fscanf() 去读肯定要出问题~
[ 本帖最后由 voidx 于 2011-6-9 11:55 编辑 ]
虽然在这里对文件操作没有任何影响,但是代码读起来会比较别扭。
下面咱们来分析一下你的代码
程序代码:
struct connection *open(FILE *ps1,struct connection *head,struct connection *p) // 这里的参数 head 和 p 都只在函数 open() 内部使用 { // 而且完全不必受到传递的参数值的影响 struct connection *s; // 所以没必要定义为参数,定义两个局部变量就可以了。 p=head; while(fgetc(ps1)!=EOF) // 这里面的 fgetc() 在每次开始读取数据之前先从文件中读取一个字符,并将文件读取位置向后移 1 字节。 { // 这将会导致你的文件的第一条记录读取不完整,也就是少了第一个字符。你也可以向文件开头写入一个无意义的字符来避免这种错误 s=(struct connection*)malloc(sizeof(struct connection)); // 以下 4 行会先为 p->next 分配空间,然后向 p 指向的结构体 p->next=s; // 读入数据,并将 p 指向 p->next。 // 下面 fscanf 中, 在数组变量前不需要加 '&',加了也不会错 fscanf(ps1,"%d%s%s%s%s",&p->number,&p->name,&p->adress,&p->tphone,&p->qq); // 这么做在全部记录读取完之后,链表尾部会多出一个内容不确定的节点。 p=s; // } p->next=NULL; return head; }
如果楼主以前用 fwrite() 进行过文件操作,把之前生成的文件删掉,重新写一个文件。
因为 fwrite() 写的文件用 fscanf() 去读肯定要出问题~
[ 本帖最后由 voidx 于 2011-6-9 11:55 编辑 ]