C语言链表和文件操作

这里说下 p是一个结构指针变量 而first也是一个结构指针变量。 first指针是链表的头结点。为什么我这样做不能从Excel导出信息来。另外我能把链表的结点数据存入Excel中 但就是导不出来,试了好多种方法都不行 求大神解决

扩展名为xls的文件是office的excel文件,这是一种二进制文件。(当然不排除是一种挂羊头卖狗肉的文本文件,这种情况不考虑。)

你说你能写进去,貌似看你用了fprintf写文件吧,没错,但是fprintf是写文本文件的,按一定格式写的文本。你用\t作分隔输出的文件类似逗号分隔的csv文件,是可以被Excel识别并打开的,没错。

但是,fread是读取二进制文件的函数,如果文件中是纯文本,你用fread去读当然是错的,如果文件中是二进制,你用fread也不可能读成你想要的结构体。如果你的xls文件是Excel的原生二进制文件,那就更不可能是你用fread能读出来的,得用专门的库,如微软官方的office com库。

不知你明不明白二进制文件和文本文件的区别.

当然如果你读的那个xls文件就是你用fprintf写进去的文件,请用fscanf函数按照写时候的格式去读才行。自己看看fscanf函数,跟scanf类似。

追问

嗯 大佬 你说的都对 但我把fread换成fsanf也还是读不出来 会不会是 我那样用链表遍历读取不行 格式错误啊

追答

你读的xls文件是哪来的,是你自己用fprintf写的?还是说是用excel保存出来的?如果是Excel保存来的,那你放弃吧,那是二进制文件,你不知道人家内部的数据二进制序列化规则,靠fread这种裸api是读不到想要的数据的。

追问

不是,我自己写入进去的

程序写入进去的

写入那里是college是个数组。是不是哪里有问题

追答

college是个字符串啊。用fscanf读。

追问

fscan也读不出来

追答

读写模式那里不要加b,b是二进制的意思。读的过程中加些输出信息信息,再调试一下嘛

追问

大佬,我实在不行了。调用函数,dh能输出,那个还是读取不了,读的时候也加了信息

还有我换成了记事本txt的,还是只能写,不能读

追答

fscanf里的整型量要加取地址符&

追问

那个我也试过了,没用

追答

上代码,输出的是什么

追问

*********************");
printf("\n\n\n\n\n按任意键跳转到主菜单:");
getch(); //从键盘读取一个字符 任意键
system("cls"); //清屏

代码有点长,没啥要他输出的。我只想他的信息能写入,能读出就可以了

暂时只写了一个功能,就是管理者界面,管理者界面里的1-商品信息录入这个

追答

你的链表头指针是全局变量,写的过程中有给链表申请内存。而读的过程中链表并没有对链表申请内存,如果重启程序直接读,first是空指针,当然读不到。

另外,你这样用链表是不合理的。malloc的内存没有free,这是内存泄露。

睡觉了。自己慢慢改吧

补充一下吧:用链表的目的无非是在内存能动态增加元素。但你输入后就立即写入了文件,输入的时候还限制了个数,读文件的时候也要个数,直接用数组就行了。可能你是在学习链表用法,但这样有点滥用了。

追问

感谢大佬,没问题了。能读了

一直以为他读的时候结点已经有内存,搞了一晚上

温馨提示:答案为网友推荐,仅供参考
相似回答