一道有关c++的编程基础题目~~ 100

将实践练习2中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中包含结构体数组或指针。输出到ASCII文件的信息包括每个学生的学号、三门成绩... 将实践练习2 中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中包含结构体数组或指针。输出到ASCII 文件的信息包括每个学生的学号、三门成绩和名次,每人一行

#include<stdio.h>
#include <stdlib.h>
#define SIZE 5
struct Student_type
{
int id ;
char name[5] ;
int math ;
int en ;
int ph ;
int sum ;
double aver ;
}stud [SIZE] ;
int save( )
{ FILE *fp; int i;
if((fp=fopen("C:\\Users\\Administrator\\Desktop\\data.dat","w"))==NULL)
{ printf("cannot open file\n");
return;
}

for(i=0;i<SIZE;i++)
fprintf(fp,"%d %s %d %d %d %f\n",stud[i].id,stud[i].name[i],
stud[i].math,stud[i].en,stud[i].ph,stud[i].sum,stud[i].aver);
fclose(fp);
return 0;
}
int n ;
int q ;

int sca(int n)
{
long int i ;
int ave() ;

int pr() ;
for(i = 0; i < n; i++)
{
scanf("%d%s" , &stud[i].id , &stud[i].name) ;
scanf("%d%d%d" , &stud[i].math , &stud[i].en , &stud[i].ph) ;
}
ave() ;

pr() ;
return 0 ;

}

int ave()
{
int i ;
for(i = 0; i< n; i++)
{
stud[i].sum = stud[i].math +stud[i].en + stud[i].ph ;
stud[i].aver = (double)stud[i].sum / 3 ;
}
return 0 ;
}

int pr()
{
int i ;
printf("名次 num name math eng phy total aver\n") ;
for(i = 0; i < n; i++)
{
printf(" %d %d %s " , i + 1 , stud[i].id , stud[i].name) ;
printf("%d %d %d " , stud[i].math , stud[i].en , stud[i].ph) ;
printf("%d %.2lf\n" ,stud[i].sum ,stud[i].aver) ;
}
return 0 ;
}

int check(int id)
{
int i ;
for(i = 0; i < n; i++)
{
if(id == stud[i].id)
{
printf("%d %d %s " , i + 1 , stud[i].id , stud[i].name) ;
printf("%d %d %d " ,stud[i].math , stud[i].en , stud[i].ph) ;
printf("%d %.2lf\n" , stud[i].sum ,stud[i].aver) ;
}
}
return 0 ;
}

int main()
{FILE *fp;
int i;

printf("输入学生人数\n") ;
scanf("%d" , &n) ;
sca(n) ;
/*printf("输入学生学号:\n") ;
scanf("%d" , &q) ;
check(q) ;*/

printf("enter data of students:\n");
for(i=0;i<5;i++)
{scanf("%d %s %d %d %d %f\n",stud[i].id,stud[i].name[i],
stud[i].math,stud[i].en,stud[i].ph,stud[i].sum,stud[i].aver);}
save();

if((fp=fopen("C:\\Users\\Administrator\\Desktop\\data.bat","r"))==NULL)
{printf("cannot open file\n"); exit(0); }
for(i=0;i<SIZE;i++)
{
fscanf(fp,"%d %s %d %d %d %f\n",stud[i].id,stud[i].name[i],
stud[i].math,stud[i].en,stud[i].ph,stud[i].sum,stud[i].aver);
printf ("%d %s %d %d %d %f\n",stud[i].id,stud[i].name[i],
stud[i].math,stud[i].en,stud[i].ph,stud[i].sum,stud[i].aver);
}
fclose (fp);
}

实验二已做好,不过省略了排序
代码如上,为何我无法进行文件的写入?
展开
 我来答
夜礼服假面MP
2014-12-23 · TA获得超过3437个赞
知道大有可为答主
回答量:1034
采纳率:77%
帮助的人:352万
展开全部
#include<stdio.h>
#include <stdlib.h>
#define SIZE 5
struct Student_type
{
int id ;
char name[5] ;
int math ;
int en ;
int ph ;
int sum ;
double aver ;
}stud [SIZE] ;
int save( )   
{ FILE *fp;   int i;
   if((fp=fopen("C:\\Users\\Administrator\\Desktop\\data.dat","w"))==NULL)      
   { printf("cannot open file\n");
      return;
   }

   for(i=0;i<SIZE;i++)
      fprintf(fp,"%d %s %d %d %d %f\n",stud[i].id,stud[i].name[i],
                   stud[i].math,stud[i].en,stud[i].ph,stud[i].sum,stud[i].aver);
   fclose(fp);
   return 0;
}
int n ;
int q ;

int sca(int n) 
{
long int i ;
int ave() ;

int pr() ;
for(i = 0; i < n; i++)
{
scanf("%d%s" , &stud[i].id , &stud[i].name) ;
scanf("%d%d%d" , &stud[i].math , &stud[i].en , &stud[i].ph) ;
}
ave() ;

pr() ;
return 0 ;

}

int ave() 
{
int i ;
for(i = 0; i< n; i++)
{
stud[i].sum = stud[i].math +stud[i].en + stud[i].ph ;
stud[i].aver = (double)stud[i].sum / 3 ;
}
return 0 ;
}

int pr()
{
int i ;
printf("名次  num  name  math  eng  phy   total   aver\n") ;
for(i = 0; i < n; i++)
{
printf("  %d    %d   %s    " , i + 1 , stud[i].id , stud[i].name) ;
printf("%d    %d   %d    " , stud[i].math , stud[i].en , stud[i].ph) ;
printf("%d     %.2lf\n" ,stud[i].sum ,stud[i].aver) ;
}
return 0 ;
}

int check(int id)
{
int i ;
for(i = 0; i < n; i++)
{
if(id == stud[i].id)
{
printf("%d  %d  %s  " , i + 1 , stud[i].id , stud[i].name) ;
printf("%d  %d  %d  " ,stud[i].math , stud[i].en , stud[i].ph) ;
printf("%d  %.2lf\n" , stud[i].sum ,stud[i].aver) ;
}
}
return 0 ;
}

int main()
{FILE *fp;
 int i;

printf("输入学生人数\n") ;
scanf("%d" , &n) ;
sca(n) ;
/*printf("输入学生学号:\n") ;
scanf("%d" , &q) ;
check(q) ;*/

printf("enter data of students:\n");
   for(i=0;i<5;i++)   
     {scanf("%d %s %d %d %d %f\n",stud[i].id,stud[i].name[i],
stud[i].math,stud[i].en,stud[i].ph,stud[i].sum,stud[i].aver);}
 save();

if((fp=fopen("C:\\Users\\Administrator\\Desktop\\data.bat","w+"))==NULL)///////////////////这里是写
  {printf("cannot open file\n"); exit(0); }
  for(i=0;i<SIZE;i++)
  {
  fscanf(fp,"%d %s %d %d %d %f\n",stud[i].id,stud[i].name[i],
                   stud[i].math,stud[i].en,stud[i].ph,stud[i].sum,stud[i].aver);
    printf ("%d %s %d %d %d %f\n",stud[i].id,stud[i].name[i],
                   stud[i].math,stud[i].en,stud[i].ph,stud[i].sum,stud[i].aver);
   }
   fclose (fp);
}
laocui172
2014-12-23 · TA获得超过1754个赞
知道小有建树答主
回答量:1957
采纳率:0%
帮助的人:901万
展开全部
if((fp=fopen("C:\\Users\\Administrator\\Desktop\\data.dat","w"))==NULL)

第二个参数“w”说明文件操作只能写,不能读。
另外需要保证这个路径存在(文件不存在没事)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式