从键盘输入10个学生的数据,并把它们转存到磁盘上,再从磁盘中读出并输出在屏幕上。
不知道哪里错了
#include
#define SIZE 10
struct Student{
char name[10];
int num;
int age;
char addr[15];
}stu[SIZE];
struct Student stud[SIZE];
int main(){
printf("please enter date of students:\n");
int i;
for(i=0;iscanf("%s%d%d%s",stu[i].name,&stu[i].num,&stu[i].age,stu[i].addr);
//保存到磁盘
FILE *fp;
if((fp=fopen("stu.dat","wb"))==NULL){
printf("cannot open file\n");
exit(0);
}
for(i=0;iif(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
printf("file write error\n");
}
fclose(fp);
//从磁盘文件中读出
FILE *fp1;
if((fp1=fopen("stu.dat","rb"))==NULL){
printf("cannot open file\n");
exit(0);
}
for(i=0;ifread(&stud[i],sizeof(struct Student),1,fp1);
printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
fclose(fp1);
return 0;
}
把第35行,36行用大括号一起括起来,放到第34行的for循环里即可。
修改如下:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 3
struct Student{
char name[10];
int num;
int age;
char addr[15];
}stu[SIZE];
struct Student stud[SIZE];
int main(){
printf("please enter date of students:\n");
int i;
for(i=0;i<SIZE;i++)
scanf("%s%d%d%s",stu[i].name,&stu[i].num,&stu[i].age,stu[i].addr);
//保存到磁盘
FILE *fp;
if((fp=fopen("stu.dat","wb"))==NULL){
printf("cannot open file\n");
exit(0);
}
for(i=0;i<SIZE;i++){
// https://baike.baidu.com/item/fwrite/10942398?fr=aladdin
if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
printf("file write error\n");
}
fclose(fp);
//从磁盘文件中读出
FILE *fp1;
if((fp1=fopen("stu.dat","rb"))==NULL){
printf("cannot open file\n");
exit(0);
}
for(i=0;i<SIZE;i++){
fread(&stud[i],sizeof(struct Student),1,fp1);
printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
}
fclose(fp1);
return 0;
}
scanf里面的%c,%d,%s之间用空格或逗号隔开,不然输入的数据怎么分开呢!
不知道你这个问题是否已经解决, 如果还没有解决的话://先倒序存到一个新的链表中,然后输出
//采用头插法即可
void reverse_output(Node* head)
{
Node* reverse_first = (Node*)malloc(sizeof(Node));
assert(reverse_first);
reverse_first -> data = 0;
reverse_first -> next = NULL;
Node* p = head->next;
while(p)
{
Node* save = p;
p = p->next;
save->next = reverse_first->next;
reverse_first->next = save;
}
print_list(reverse_first);
}