失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 使用C语言读取.txt文本数据构建链表时fscanf用法不当以及文件编码格式不对导致读取失败

使用C语言读取.txt文本数据构建链表时fscanf用法不当以及文件编码格式不对导致读取失败

时间:2024-02-16 19:49:09

相关推荐

使用C语言读取.txt文本数据构建链表时fscanf用法不当以及文件编码格式不对导致读取失败

问题描述

做C语言课设的时候想要通过读取文本的方式构建一个链表。

结构体

typedef struct grade {char subject[15];//科目char startTime[10];//学年,输入-09或-02double credit;//该学科的学分double usual;//平时成绩double midterm;//期中成绩double exam;//期末成绩double final;//最终成绩,即绩点char chongxiu;//是否为重修,是则Y,否则Nstruct grade* next;}GradeNode,* ListGrade;

创建头节点:

void InitListGrade(ListGrade* head) {if ((*head = (ListGrade)malloc(sizeof(GradeNode))) == NULL) {printf("磁盘空间分配出错,创建信息表失败!\n");exit(-1);}(*head)->next = NULL;}

使用带头节点的head开始构建链表:

struct grade* CreatList2(ListGrade head) {int point = 0;ListGrade gradenode,p=head;FILE* fp;if ((fp = fopen("D://学生成绩数据.txt", "r")) == NULL) {printf("打开文件失败!请检查文件是否存在,若存在则请退出系统后再次登录。\n");exit(-1);}while (1) {gradenode = (ListGrade)malloc(sizeof(GradeNode));if (EOF == fscanf(fp, "%s %s %.1lf %.1lf %.1lf %.1lf %.1lf %c", gradenode->subject, gradenode->startTime, &gradenode->usual, &gradenode->midterm, &gradenode->exam, &gradenode->final, &gradenode->chongxiu))break;p->next = gradenode;gradenode->next = NULL;p = gradenode;}fclose(fp);return head;}

要测试的数据:

原因分析:

遇到的问题1:

一开始没有注意.txt文件的编码格式,而记事本默认的是UTF-8,导致我读取不到正确的汉字字符。 >﹏<

遇到的问题二:

注意到上述问题后立马整改,原以为这就OK了,结果输出的是什么呀:

图一:vscode中的输出结果:

图二:VS的输出结果:

(代码在VS上写的,我会拿部分代码到vscode中测试一下,可能复制粘贴得不好吧,导致两个的输出结果不怎么一样)

这个问题搞得我一头雾水,改了很久也没结果。😤

最后去问学长的时候人家一下子就看出问题了:fscanf不可以指定小数位o((⊙﹏⊙))o.

改了之后确实可以正常构建链表了。😁

佩服学长的本事时也感慨自己的无知,😑

被这个小点绊倒了这么久爬不起来,欸!😭 ≡(▔﹏▔)≡

如果觉得《使用C语言读取.txt文本数据构建链表时fscanf用法不当以及文件编码格式不对导致读取失败》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。