fwrite结构体变量到文件输出乱码的解决办法

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);
}

没有出现烫烫烫

  • 12
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值