fwrite函数的问题
不知道下面这个程序是不是谭书P138印刷错了还是我抄错了(我对照了4,5偏没发现和书上有什么不同啊),怎么运行后输入的学号和年龄送到文件里是乱码呢
#include <stdio.h>
#define SIZE 4
struct student_type
{char name[10];
int num;
int age;
char addr[15];
}stud[SIZE];
void save()
{FILE *fp;
int i;
if((fp=fopen( "stu_list ", "wb "))==NULL)
{printf( "can not open file\n ");
return;
}
for(i=0;i <SIZE;i++)
if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1)
printf( "file write error\n ");
fclose(fp);
}
main()
{int i;
for(i=0;i <SIZE;i++)
scanf( "%s%d%d%s ",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
save();
}
[解决办法]
if((fp=fopen( "stu_list ", "w "))==NULL) //w 文本方式操作文件
{
printf( "can not open file\n ");
return;
}
for(i=0;i <SIZE;i++)
fprintf(fp, "%s %d %d %s ",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
[解决办法]
虫子说的很对
用fwrite 和fread对应,以wb写入,就要以rb读出
但是由于他们是出来二进制的,所以查看文件中的内容会有乱码,但读出来没有错
按照lz的代码写了个put() 显示到屏幕上
#include <stdio.h>
#define SIZE 4
struct student_type
{char name[10];
int num;
int age;
char addr[15];
}stud[SIZE];
void save()
{FILE *fp;
int i;
if((fp=fopen( "stu_list.txt ", "wb "))==NULL)
{printf( "can not open file\n ");
return;
}
for(i=0;i <SIZE;i++)
if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1)
printf( "file write error\n ");
fclose(fp);
}
void open()
{
FILE *fp;
int i;
if((fp=fopen( "stu_list.txt ", "rb "))==NULL)
printf( "can not open file\n ");
for(i=0;i <SIZE;i++)
if(fread(&stud[i],sizeof(struct student_type),1,fp)==1)
printf( "%s %d %d %s\n ",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
fclose(fp);
}
int main()
{int i;
for(i=0;i <SIZE;i++)
scanf( "%s%d%d%s ",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
save();
open();
return 0;
}
-------------
gcc下ok