| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 906 人关注过本帖
标题:文件的输入输出出错了 请指点一下。。
取消只看楼主 加入收藏
hover58
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-10-30
收藏
 问题点数:0 回复次数:3 
文件的输入输出出错了 请指点一下。。
输入学生成绩 存入文件中
读取文件数据存入结构体数组中  计算出总分
输出这段程序

请哪位 高人 帮忙看一下 怎么编译器 能够通过 但是运行的时候会出错呢?
#include <stdio.h>
#include <stdlib.h>
typedef struct student{
 int id;
 char name[20];
 int mid;
 int end;
 int total;
}ST;
int read_records(FILE *f,ST *s,int n);
void print_records(ST *s,int n);
int main(void)
{
 FILE *f=NULL;
 int n=0;
 ST *s=NULL;
 n=read_records(f,s,n);
 print_records(s,n);
 free(s);
 return 0;
}
int read_records(FILE *f,ST *s,int n)
{
 int i;
 ST a;
 char line[50];
 if((f=fopen("st.txt","w"))==NULL){
  printf("Can't open it\n");
  exit(1);
 };
 printf("请输入学号 名字 期中 期末(ctrl+z结束输入)\n ");
 fgets(line,50,stdin);
 while(!feof(stdin)){
  sscanf(line,"%d %s %d %d ",
   &a.id,a.name,&a.mid,&a.end);
  fwrite(s,sizeof(ST),1,f);
  n++;
  fgets(line,50,stdin);
 
 }
 fclose(f);
 s=malloc(sizeof(ST)*n);
 if((f=fopen("st.txt","r"))==NULL){
  printf("无法打开文件\n");
  exit(1);
 };
 for(i=0;i<n;i++)
  fread((s+i),sizeof(ST),1,f);
 fclose(f);
 return(n);
}
void print_records(ST *s,int n)
{
 int i=0;
 for(i=0;i<=n;i++)
  (s+i)->total=(s+i)->mid+(s+i)->end;
 printf("    --------------------------------    \n");
 printf("ID     NAME   MID  END  TOTAL  \n");
 printf("    --------------------------------    \n");
 for(i=0;i<=n;i++)
  printf("%d      %s       %d    %d    %d   \n",
  (s+i)->id,(s+i)->name,(s+i)->mid,(s+i)->end,(s+i)->total);
 printf("    --------------------------------    \n");
}
搜索更多相关主题的帖子: 文件 输出 输入 
2007-11-23 20:16
hover58
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-10-30
收藏
得分:0 
:) 首先谢谢大家的帮助  
其实我主要想 建立一个 动态内存 然后用fread();把数据存入student结构体的数组中...
然后用结构体的数组来操作整个程序.
2007-11-24 14:13
hover58
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-10-30
收藏
得分:0 
现在我把代码改成了这个样子.如果我直接输入的时候ctrl+z结束的话  还是可以运行到下面的 结果输出模式的.
但是如果我输入了 数据  就会出现
"0X00403732"指令引用的"0X00000000"内存.该内存不能为read
这个是怎么回事.....请高人指教...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student{
 char name[20];
 int mid;
 int end;
 int total;
}ST;
int main(void)
{
 FILE *f;
 int n=0;
 ST *s=NULL;
 int i;
 ST a;
 char line[50];
 if((f=fopen("st.txt","wb"))==NULL){
  printf("Can't open it\n");
  exit(1);
  };
 printf("请输入名字 期中 期末(ctrl+z结束输入)\n ");
 fgets(line,50,stdin);
 while(!feof(stdin)){
  sscanf(line," %s %d %d ",
   a.name,&a.mid,&a.end);
  fwrite(s,sizeof(ST),1,f);
  n++;//一共写入了n个数据
  fgets(line,50,stdin);
  }
  fclose(f);
 s=(ST*)malloc(sizeof(ST)*n);//s指向动态内存的首地址
 if((f=fopen("st.txt","rb"))==NULL){
  printf("无法打开文件\n");
  exit(1);
  };
 for(i=0;i<=n;i++)
  fread((s+i),sizeof(ST),1,f);//把数据写入s[n]中
 fclose(f);
 for(i=0;i<=n;i++)
  (s+i)->total=(s+i)->mid+(s+i)->end;
 
printf("    ---------------------------------------------------------    \n");
printf("ID     NAME          MID       END      TOTAL  \n");
printf("    ---------------------------------------------------------    \n");
 for(i=0;i<=n;i++)
  printf("%d      %s       %d    %d    %d   \n",
  i+1,(s+i)->name,(s+i)->mid,(s+i)->end,(s+i)->total);
printf("    -------------------------------- -------------------------   \n");
 free(s);//释放
 return 0;
}
2007-11-24 14:49
hover58
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-10-30
收藏
得分:0 
顶以下......................
2007-11-25 15:02
快速回复:文件的输入输出出错了 请指点一下。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012513 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved