又来问题了,头都快炸了!
#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("cannot 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();
}
-----------------------------------------------------------------
#include<stdio.h>
#define SIZE 4
struct student_type
{char name[10];
int num;
int age;
char addr[15];
}stud[SIZE];
main()
{int i;
FILE*fp;
fp=fopen("stu_list","rb");
for(i=0;i<SIZE;i++)
{fread(&stud[i],sizeof(struct student_type),1,fp);
printf("%-10s %4d %4d %-15s\n",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);}
fclose(fp);
}
---------------------------------------------------------------------
运行第一段程序,我输入:
zhang 1001 19 room_101
fun 1002 20 room_102
tan 1003 21 room_103
ling 1004 22 room_104
然后我运行第二段程序,想看下输出结果,结果为什么是这样的?中间的数据不对呀!
zhang 1116 1118 room_101
fun 1145 1147 room_102
tan 1174 1176 room_103
ling 1203 1205 room_104
[解决办法]
fread,fwrite造成的…
[解决办法]
编译时应该出 warning 了
printf 输出 int 类型怎么能用 &,这不成是输出地址了吗
printf("%-10s %4d %4d %-15s\n", stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
[解决办法]
printf("%-10s %4d %4d %-15s\n", stud[i].name, stud[i].num, stud[i].age,stud[i].addr);
改下吧。printf这里不会有警告的,这个一般要自己注意。
[解决办法]
这个貌似是谭老先生《C程序设计》(第三版)中的例题?
[解决办法]
#include <stdio.h>#include <stdlib.h>struct student_type{ char name[10]; char number[10]; int math; int chinese; int english;};struct student_type stu;void save();int main(){ printf("Enter a student's information.\n"); scanf("%s%s%d%d%d",stu.name,stu.number,&stu.math,&stu.chinese,&stu.english); printf("Name Number Math Chinese English\n"); printf("%-10s%-10s%-4d%-4d%-4d\n",stu.name,stu.number,stu.math,stu.chinese,stu.english); save(); return 0;}void save(){ FILE *fp; char *filename="sudent.txt"; if((fp=fopen(filename,"wb"))==NULL) { printf("Can not open file\n"); exit(0); } if(fwrite(&stu,sizeof(struct student_type),1,fp)!=1) { printf("write file error.\n"); exit(0); } fclose(fp);}
[解决办法]
LZ 按你的第一个程序输入到文件中的就不对撒
#include<stdio.h>#define SIZE 4struct 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("cannot 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();}