问题遇到的现象和发生背景
visual studio2017
int e()
{
int i;
FILE *fp;
fp = fopen_s("chengji.txt", "w");
fprintf(fp, "学号 姓名 平时成绩 实验成绩 考试成绩 总评成绩\n");
for (i = 0; i < 4; i++)
fprintf(fp, "%d%14.2s%14.2f%14.2f%14.2f%14.2f\n", stu[i].num, stu[i].name, stu[i].pingshi, stu[i].shiyan, stu[i].kaoshi, stu[i].zongping);
printf("\n\n*******************恭喜,保存完成!*******************\n\n");
}
问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
#include<math.h>
struct student
{
int num;
char name[20];
float pingshi;
float shiyan;
float kaoshi;
double zongping;
}stu[4];
int main()
{
int a();
int b();
int c();
int d();
int e();
int n;
while (n != 6)
{
printf("\t大学计算机基础成绩管理系统\n");
printf("1:输入一个班学生大学计算机基础成绩记录\n");
printf("2:显示所有成绩记录\n");
printf("3:计算并输出平均成绩,均方差\n");
printf("4:输出成绩与排名\n");
printf("5:结果存入文件chengji.txt\n");
printf("6:退出系统\n");
printf("输入选项代码:");
scanf_s("%d", &n);
switch (n)
{
case 1:a(); break;
case 2:b(); break;
case 3:c(); break;
case 4:d(); break;
case 5:e(); break;
case 6:printf("\n*******************谢谢使用!*******************\n"); break;
break;
}
}
getchar();
}
/* 子 函 数*/
int a() /* 输入一个班的学生记录*/
{
int i;
for (i = 0; i < 4; i++)
{
printf("请输入学号 姓名 平时成绩 实验成绩 考试成绩:");
scanf_s("%d%s%f%f%f", &stu[i].num, stu[i].name, &stu[i].pingshi, &stu[i].shiyan, &stu[i].kaoshi);
}for (i = 0; i < 4; i++)
stu[i].zongping = 0.1*stu[i].pingshi + 0.3*stu[i].shiyan + 0.6*stu[i].kaoshi;
}
int b()/* 显示所有记录*/
{
int i;
printf("学号 姓名 平时成绩 实验成绩 考试成绩 总评成绩\n");
for (i = 0; i < 4; i++)
printf("%d%14.2s%14.2f%14.2f%14.2f%14.2f\n", stu[i].num, stu[i].name, stu[i].pingshi, stu[i].shiyan, stu[i].kaoshi, stu[i].zongping);
}
int c()/* 求出全班平均成绩,显示均方差*/
{
int a[4] = { 0,1,2,3 };
int i, j;
double total = 0, pfc = 0, bzc = 0;
double ave;
for (i = 0; i < 4; i++)
{
total = total + stu[i].zongping;
}
ave = total / 4.0;
printf("总评平均成绩是%f\n", ave);
for (i = 0; i < 4; i++)
{
pfc = pow((stu[i].zongping - ave), 2) / 4;
}
bzc = sqrt(pfc);
printf("\n平方差是%f\n", pfc);
printf("\n标准差是%f\n", bzc);
}
int d()
{
int a[4] = { 0,1,2,3 };
int i, j, temp;
for (j = 0; j < 3; j++)
{
for (i = 0; i < 3 - j; i++)
if (stu[a[i]].zongping > stu[a[i + 1]].zongping)
{
temp = a[i]; a[i] = a[i + 1];
a[i + 1] = temp;
}
}
printf("顺序为:\n");
printf("学号 姓名 总评成绩\n");
for (i = 0; i < 4; i++)
printf("%d%10.2s%15.2f\n", stu[a[i]].num, stu[a[i]].name, stu[a[i]].zongping);
printf("\n");
}
int e()
{
int i;
FILE *fp;
fp = fopen_s("chengji.txt", "w");
fprintf(fp, "学号 姓名 平时成绩 实验成绩 考试成绩 总评成绩\n");
for (i = 0; i < 4; i++)
fprintf(fp, "%d%14.2s%14.2f%14.2f%14.2f%14.2f\n", stu[i].num, stu[i].name, stu[i].pingshi, stu[i].shiyan, stu[i].kaoshi, stu[i].zongping);
printf("\n\n*******************恭喜,保存完成!*******************\n\n");
}
运行结果及报错内容
严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E0513 不能将 "errno_t" 类型的值分配到 "FILE *" 类型的实体
严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E0167 "const char *" 类型的实参与 "FILE **" 类型的形参不兼容
严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E0165 函数调用中的参数太少
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C4996 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
我的解答思路和尝试过的方法
fopen 改为fopen_s
我想要达到的结果
控制系统程序正常运行