我的这个程序在VS2010上可以编译成功,但是在VS2015上就不行,求指导啊,。。
#include
#include
struct student{ /* 学生结构体 /
int num;
char name[20];
char optional[2];
union{
float mark; / 百分制分数成员mark /
char grade; / 五级制等级成员grade /
}score; / 成绩共用体 /
};
void main()
{
struct student stu[50];
int i,n; / n:学生人数 /
//在两条星线间填入相应代码,定义相当的计数器变量并置初值
/*******************************************************************/
int c[5]={0,0,0,0,0},count=0;
float avg=0;
int bxrs=0;
/********************************************************************/
/* 输入n个学生成绩记录,统计必修学生人数和总成绩 */
printf("请输入学生人数:");
scanf("%d",&n);
printf("请依次输入%d个学生成绩记录:\n",n);
for(i=0;i<n;i++){
printf(">>%d:学号 姓名 选课类型(T-选修,F-必修):",i+1);
scanf("%d%s%s",&stu[i].num,stu[i].name,stu[i].optional);
getchar(); /* 读回车符 */
if(strcmp(stu[i].optional,"T")==0){
printf(">>成绩等级:");
scanf("%c",&stu[i].score.grade);
}
else{
printf(">>成绩分数:");
scanf("%f",&stu[i].score.mark);
//在两条星线间填入相应代码,统计必修学生人数和总成绩
/********************************************************************/
bxrs++;
avg+=stu[i].score.mark;
/********************************************************************/
}
}
avg=avg/bxrs; /* 计算必修学生平均成绩 */
/* 分类统计选修学生各等级人数和必修学生超平均分人数 */
for(i=0;i<n;i++){
//在两条星线间填入代码, 分类统计选修学生各等级人数和必修学生超平均分人数
/**********************************************************************/
if(strcmp(stu[i].optional,"T")==0){
switch(stu[i].score.grade){
case 'A':c[0]++;break;
case 'B':c[1]++;break;
case 'C':c[2]++;break;
case 'D':c[3]++;break;
case 'E':c[4]++;break;
}
}
else{
if(stu[i].score.mark>avg)count++;
}
/**********************************************************************/
}
/* 输出统计结果 */
printf("选修学生:A=%d,B=%d,C=%d,D=%d,E=%d\n",c[0],c[1],c[2],c[3],c[4]);
printf("必修学生:平均成绩=%.2f,超过平均成绩学生人数=%d\n",avg,count);
}
他是这样报错的:
1>------ 已启动生成: 项目: ConsoleApplication1, 配置: Debug Win32 ------
1> proj10_2.cpp
1>e:\c语言!!!\实验10 共用体与枚举\第2题\proj10_2.cpp(25): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h(1270): note: 参见“scanf”的声明
1>e:\c语言!!!\实验10 共用体与枚举\第2题\proj10_2.cpp(29): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h(1270): note: 参见“scanf”的声明
1>e:\c语言!!!\实验10 共用体与枚举\第2题\proj10_2.cpp(33): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h(1270): note: 参见“scanf”的声明
1>e:\c语言!!!\实验10 共用体与枚举\第2题\proj10_2.cpp(37): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h(1270): note: 参见“scanf”的声明
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
提示说的非常清楚了,用scanf_s替换scanf
看不懂啊,为什么要用scanf_s,scanf_s是啥
版本的问题,会有些小差别。用scanf_s替换scanf