C语言如何把结构体存入文件。。。。。输出有乱码。。。
#include<stdio.h>#include<stdlib.h>#defineN3structstudent{intnumber;charname[16],sex;...
#include <stdio.h>
#include <stdlib.h>
#define N 3
struct student
{
int number;
char name[16],sex;
float score[3],aver;
};
void main()
{
FILE *fp;
char ch;
struct student s[N];
int number,i;
printf("please input %d students' information as follow:\n",N);
printf("number name sex score[0] score[1] score[2]\n]");
for(i=0;i<N;i++)
{
printf("please input %dth student's informatio:\n",i+1);
scanf("%d%s%*c%c%f%f%f",&s[i].number,s[i].name,&s[i].sex,&s[i].score[0],&s[i].score[1],&s[i].score[2]);
}
if((fp=fopen("c:\\abc.c","w"))==NULL)
{
printf("file open error.\n");
exit(0);
}
for (i=0;i<N;i++)
fwrite(&s[i],sizeof(s),1,fp);
//fprintf(fp,struct s[N]);
fclose(fp);
if((fp=fopen("c:\\abc.c","r"))==NULL)
{
printf("file open error.\n");
exit(0);
}
while(!feof(fp))
if((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
} //意思大概就是写入几个个学生的信息并存入一个文件 展开
#include <stdlib.h>
#define N 3
struct student
{
int number;
char name[16],sex;
float score[3],aver;
};
void main()
{
FILE *fp;
char ch;
struct student s[N];
int number,i;
printf("please input %d students' information as follow:\n",N);
printf("number name sex score[0] score[1] score[2]\n]");
for(i=0;i<N;i++)
{
printf("please input %dth student's informatio:\n",i+1);
scanf("%d%s%*c%c%f%f%f",&s[i].number,s[i].name,&s[i].sex,&s[i].score[0],&s[i].score[1],&s[i].score[2]);
}
if((fp=fopen("c:\\abc.c","w"))==NULL)
{
printf("file open error.\n");
exit(0);
}
for (i=0;i<N;i++)
fwrite(&s[i],sizeof(s),1,fp);
//fprintf(fp,struct s[N]);
fclose(fp);
if((fp=fopen("c:\\abc.c","r"))==NULL)
{
printf("file open error.\n");
exit(0);
}
while(!feof(fp))
if((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
} //意思大概就是写入几个个学生的信息并存入一个文件 展开
展开全部
你的结构体里即有数字,又有Float 又有字符串。保存时也没有格式转换,原格式直接存入的。 那么你要输出时还是需要按原来存入时的格式输出。
直接用putchar 输出 整数或者Float 都会导出错误和乱码。 你需要用 fread 直接读取到 struct student 类型的结构体中, 然后按项按类型打印输出才行。
否则就把 所以变量都弄成字符串的。
直接用putchar 输出 整数或者Float 都会导出错误和乱码。 你需要用 fread 直接读取到 struct student 类型的结构体中, 然后按项按类型打印输出才行。
否则就把 所以变量都弄成字符串的。
追问
额。。。能不能直接把程序写出来,这样我还是不太懂诶!谢谢! 而且输入就有问题。。。
追答
代码
... ...
void main()
{
FILE *fp;
char ch;
struct student s[N];
int number,i;
printf("please input %d students' information as follow:\n",N);
printf("number name sex score[0] score[1] score[2]\n");
for(i=0;i<N;i++)
{
printf("please input %dth student's informatio:\n",i+1);
fflush(stdin);
scanf("%d %s %c %f %f %f", &s[i].number,s[i].name,&s[i].sex,
&s[i].score[0],&s[i].score[1],&s[i].score[2]);
s[i].aver = (s[i].score[0] + s[i].score[1] + s[i].score[2])/3;
}
if((fp=fopen("abc.c","wb"))==NULL)
{
printf("file open error.\n");
exit(0);
}
for (i=0; i<N; i++) {
fwrite(&s[i],sizeof(s[i]),1,fp);
}
fclose(fp);
if((fp=fopen("abc.c","rb"))==NULL)
{
printf("file open error.\n");
exit(0);
}
struct student tmp;
while(!feof(fp) && fread(&tmp, sizeof(tmp), 1, fp)) {
printf("%d\t%s\t%c\t%.2f\t%.2f\t%.2f\t%.2f\n", tmp.number, tmp.name,
tmp.sex,tmp.score[0], tmp.score[1], tmp.score[2], tmp.aver);
}
fclose(fp);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询