C语言的一些问题
发布网友
发布时间:2022-05-03 09:26
我来回答
共2个回答
热心网友
时间:2022-05-05 12:33
FILE *fp; -- fp 相当于打开后的文件的 id, C 语言用这个id来区分打开的是哪个文件,读还是写还是又读又写又添加,是2进制文件还是ASCII文件。FILE 是系统定义的结构。
fp=fopen("fstu","wb"); -- 打开文件,文件名 fstu, wb--写, 2进制文件, fstu文件 id 是 fp。
fclose(fp); -- 文件用完要关闭文件,让读写缓冲区的内容写入fstu。
stu[] -- 学生结构数组,stu[i]--存第i个学生信息的一个结构,stu[i].n -- 序号。从 1 开始编。数组下标 i 从 0 开始.
if(stu[i].score[j]>100) { j--;continue;} -- 分数大于100,则j减1,跳过循环体内的下面的语句:
s+=stu[i].score[j]; -- 计算分数之和,存入s
执行下一循环,实际作用是让刚才的j循环重做一次,重做输入分数计算。
j 循环 计算了 3 门成绩 之和
stu[i].avr=s/3.0; -- 除3 得平均分,存入 第i个学生信息结构里的 avr 里。
fwrite(&stu[i],sizeof(struct student),1,fp); -- 把第i个学生信息结构里的数值,共 sizeof(struct student) 个 字节内容,写到 fp 的文件fstu里。
继续 i 循环。
热心网友
时间:2022-05-05 13:51
我帮你一条一条的分析,仔细看哦
#include "stdio.h" // 这一条通常用<>代替"",包含头文件
#define SIZE 50 // 宏定义常量,SIZE为50
int sum=0; // 定义变量sum,初始化为0
static char *str[]={"C","Math","English"};// 定义一个指向char类型的指针数组,注意{}里面的元素都是用""括起来的,""表示这是一个字符串,字符串本身就是一个地址,是字符串首个字符的地址
struct student // 定义一个结构
{ int n; // 定义int型变量n
long num; // 定义long型变量num
char name[10]; // 定义char型数组
int age; // 定义int型变量
char addr[10]; // 定义char型数组
int score[3]; // 定义int型变量
float avr; // 定义float变量
} stu[SIZE]; // 这里是定义了一个结构数组stu【SIZE】
void fin()
{ int i,j,s;char f;
FILE *fp; 【这一行的原理和用意】
printf(" Warring! Input? ( y/n ) : \7\7\7"); // \7是转义字符,表示鸣铃
f=getchar();f=getchar(); // 输入字符
if(f!='y') // 比较
return;
fp=fopen("fstu","wb"); 【这一行的fopen("fstu","wb");这一句的来历】 // fopen要么是打开一个已有的文件,要么是创建一个不存在的文件,第一个引号中的部分是文件的绝对路径或者相对路径,第二个引号是打开模式,比如读,写入,读取加写入,或者以文本模式进行或者以二进制模式进行。fp就是最终文件的指针,通过fp访问文件
for(i=0;i<SIZE;i++)
{ printf(" i=%d Input No. (i=-1,return) i=? ",i+1);
scanf("%d",&j);
if (j==-1)
{ printf("\n * * * Press any key return! * * *\n",j);
fclose(fp);getch();return; 【fclose(fp);是怎么回事】 // 关闭文件
}
else
{ printf(" Input num,name,age,addr : ");
stu[i].n=i+1; 【stu[]的含义,或者是什么作用】 // 数组
scanf("%ld%s%d%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].addr);
s=0;
for(j=0;j<3;j++)
{ printf(" Input %-7s score : ",str[j]);
scanf("%d",&stu[i].score[j]);
if(stu[i].score[j]>100)
{ j--;continue;} 【从这句开始以下几句的含义或是用途】
s+=stu[i].score[j]; // s=s+stu[i].score[j],将s与
结构数组stu中的第i+1个元素的score成员的第j+1个元素相加
}
stu[i].avr=s/3.0;
fwrite(&stu[i],sizeof(struct student),1,fp); // 以二进制模式写入
}
}
fclose(fp); // 关闭文件
}