文件在提示不能打开的情况下依然可以写入信息??
/*2. 程序设计。
有5 个学生,每个学生有3 门课的成绩,从键盘输入以上数据(包括学号、姓名、3
门课成绩),计算出平均成绩。
(1)将原有数据和计算出的平均分数存放在磁盘文件stud.txt中。在向文件stud.txt
写入数据后,应检查验证stud.txt 文件中的内容是否正确。
(2)将stud.txt 文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入
一个新文件stu_sort.txt 中。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
int num;
char name[20];
float chinese;
float math;
float english;
}stu[5];
float avrmber[5];
int main()
{
float avr(float a,float b,float c);
void sort();
void chenge(int i,int j);
void print();
int i;
FILE *fp;
if(!(fp=fopen("stud.txt","w")))
{
exit(0);
}
for(i=0;i<5;i++)
{
scanf("%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english);
fprintf(fp,"%d %s %.2f %.2f %.2f %.2f",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,avr(stu[i].chinese,stu[i].math,stu[i].english));
fprintf(fp,"\n");
}
fclose(fp);
fp=fopen("stud.txt","r");
for(i=0;i<5;i++)
{
fscanf(fp,"%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english);
fscanf(fp,"%f",&avrmber[i]);
}
fclose(fp);
//核对信息是否正确
printf("\n\t请核对信息是否正确。\n");
print();
sort();
printf("\n\n\t排序后的内容为:\n");
print();
if(!(fp=fopen("stu_sort.txt","w")));
{
printf("\n\n\t\t\t文件打开失败!\n");
exit(0);///////////////////////////////如果这一句注释掉,提示文件打开失败,但是手动查看文件内容,发现已经写入了?这是为什么?????
}
for(i=0;i<5;i++)
{
fprintf(fp,"%d %s %.2f %.2f %.2f %.2f\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,avr(stu[i].chinese,stu[i].math,stu[i].english));
}
fclose(fp);
printf("\n经过排序后的信息已经写入文件。\n\n");
return 0;
}
float avr(float a,float b,float c)
{
return (a+b+c)/3;
}
void sort()
{
int i,j;
float temp;
for(i=0;i<4;i++)
{
for(j=i+1;j<5;j++)
{
if(avrmber[i]<avrmber[j])
{
temp=avrmber[i];
avrmber[i]=avrmber[j];
avrmber[j]=temp;
chenge(i,j);
}
}
}
}
void chenge(int i,int j)
{
int tempd;
float tempf;
char tempc[20];
tempd=stu[i].num;
stu[i].num=stu[j].num;
stu[j].num=tempd;
strcpy(tempc,stu[i].name);
strcpy(stu[i].name,stu[j].name);
strcpy(stu[j].name,tempc);
tempf=stu[i].chinese;
stu[i].chinese=stu[j].chinese;
stu[j].chinese=tempf;
tempf=stu[i].math;
stu[i].math=stu[j].math;
stu[j].math=tempf;
tempf=stu[i].english;
stu[i].english=stu[j].english;
stu[j].english=tempf;
}
void print()
{
int i;
for(i=0;i<5;i++)
{
printf("%d %s %.2f %.2f %.2f %.2f",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,avrmber[i]);
printf("\n");
}
}
问题写在代码里。。。