fwrite烫烫烫
在写学校的C语言作业时遇到了一些问题
作业要求统计学生姓名、学号、成绩存入到结构体数组,然后输出到txt文件里,但是我刚开始的时候打开文件发现了一堆烫烫烫,我以为是自己输入到结构体的时候出错了,但是我用printf()把结构体数组的信息显示出来却发现是正确的,后来百度了一下发现是由于int类型的数据写入到文件里格式就会变成人眼中的乱码(电脑眼里还是一样的东西),于是我把int型的成绩改成char型了,可还是烫。
这是由于我设置的数组比较大,空间没有完全使用,而数组里那些未赋值的地址在txt文件中以(人眼中的乱码)烫烫烫形式输出的结果。
同时我也得到了一个信息:下次再遇见烫烫烫的时候我就知道是输出了数组里未赋值的地址的原因。
那么我得到了两个解决方案,一个是刚好把字符数组的大小设置成自己所需要的空间,但是这样还是可能会出问题,比如人名常见的有两个字和三个字的,空间难以提前写好。
另一个就是把数组全部赋上初值’\0’,代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
typedef struct Student {
char id_number[11] = { '\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0' };
char name[7] = { '\0','\0','\0','\0','\0','\0','\0' };
char m_grade[3] = { '\0','\0','\0' };
char e_grade[3] = { '\0','\0', '\0'};
}Stu;
int main() {
char ch;
char temp[8];
int size;
FILE* fp;
Stu students[2];
printf("请输入该学生的学号: ");
scanf("%s",students[0].id_number);
printf("请输入该学生的姓名: ");
scanf("%s", students[0].name);
printf("请输入%s的高数成绩: ", students[0].name);
scanf("%s", students[0].m_grade);
printf("请输入%s的英语成绩: ", students[0].name);
scanf("%s", students[0].e_grade);
if ((fp = fopen("stduent_grade.txt", "wb")) == NULL) {
printf("can not open the file\n");
exit(0);
}
printf("%s,%s,%s,%s", students[0].id_number, students[0].name, students[0].m_grade, students[0].e_grade);
fwrite(&students[0], sizeof(Stu), 1, fp);
fclose(fp);
}