c语言文件操作——输入学生信息保存到文件和读取文件内容

在我们学习c语言过程中难免不了对于文件的操作,本文介绍,利用结构体和文件操作函数进行文件的读取与写入,完成对信息的储存


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct Student
{
	char name[10];
	char address[20];
	char phone[15];
} Student;
void save(int n, Student stu[],char filename[]);//定义储存函数并声明
void show(int n,Student stu[],char filename[]);//定义读取函数并声明
void main()
{
	int i,n;
	char filename[50];
	Student stu[50];
	/*FILE *fp;*/
	printf("有几个学生\n");
	scanf("%d",&n);
	printf("请输入文件路径文件名\n");
	getchar();/*创建一个软冲区域防止回车符号被读录*/
	gets(filename);
	puts(filename);
	/*if((fp=fopen(filename,"wb"))==NULL)
	{
		printf("打开失败");
		exit(0);
	}*/
	for(i=0;i<n;i++)
	{
		printf("No.%d\n",i);
		scanf("%s%s%s",stu[i].name,stu[i].address,stu[i].phone);
	}
	save(n,stu,filename);
	show(n,stu,filename);
}
void save(int n,Student stu[],char filename[])
{
	int i;
	FILE *fp2;
	puts(filename);
	if((fp2=fopen(filename,"w"))==NULL)//给fp2赋值文件指针并判断是否打开文件成功
	{
		printf("打开失败");
		exit(0);
	}
	
	/*	for(i=0;i<n;i++)
	{
		
		printf("%s%s%s",stu[i].name,stu[i].address,stu[i].phone);
	}*/
	for(i=0;i<n;i++)
	{
		if(fwrite(&stu[i],sizeof(Student),1,fp2)!=1)
		{
			printf("error");
		}
	} 

}
void show(int n,Student stu[],char filename[])
{
	FILE *fp;
	int i;
	
	if((fp=fopen(filename,"w"))==NULL)
	{
		exit(0);
	}
	for(i=0;i<n;i++)
	{
		fread(&stu[i],sizeof(Student),1,fp);
	}
	for(i=0;i<n;i++)
	{
		
		printf("%10s%20s%15s\n\t",stu[i].name,stu[i].address,stu[i].phone);
	}
	

}

调式代码运行成功,但是有一个问题,当我们打开保存的txt文件时发现文件内容出现很多乱码

如图所示:

c语言

希望大家讨论留言,说明解决问题


打赏

网友评论7条

  1. 地板
    Rinvay

    :奸笑: 这让我想起了大学

    [回复]
    • 一去二三遥

      :亲亲: 虽然我也才毕业没多久,但是看着这个还是觉得亲切,哈哈

      [回复]
  2. 板凳
    一去二三遥

    :微笑: 这个问题是数据结构的内存长度不一致所致,C语言的fwrite函数是以二进制的方式来操作文件的,定义的int,char,float数据都是定长的,但是文本文件处理不一定是C语言定义的长度,所以会读错,导致乱码

    [回复]
  3. 沙发
    陌辰

    感觉你.comt-area 给个 高度宽度max 好点

    [回复]

发表评论