这里说下 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,这是内存泄露。
睡觉了。自己慢慢改吧
补充一下吧:用链表的目的无非是在内存能动态增加元素。但你输入后就立即写入了文件,输入的时候还限制了个数,读文件的时候也要个数,直接用数组就行了。可能你是在学习链表用法,但这样有点滥用了。
追问感谢大佬,没问题了。能读了
一直以为他读的时候结点已经有内存,搞了一晚上