C语言结构体问题,从键盘上读入一个学生的学号、姓名、三门课成绩并打印出来 用于输入的函数模块老有问题

输出的模块没有问题。求大神看一下谢谢,我的编译器是vs2015#include<stdio.h>#include<string.h>#defineN2//学生人数stru... 输出的模块没有问题。求大神看一下谢谢,我的编译器是vs2015
#include<stdio.h>
#include<string.h>

#define N 2 //学生人数

struct student
{
int id; //学号

char name[10]; //姓名

double chinese;
double maths; //三门课的成绩
double english;

double ave; //每个学生的平均分

};

typedef struct student student;

void InputStruct(struct student *p, int n);
//void SortStruct(struct student *p , int n);
void OutputStruct( struct student*p, int n);

int main()
{

student info[N];
student *p = info;

InputStruct(p , N);
OutputStruct(p , N);

return 0;
}

void InputStruct(struct student *p, int n)
{
int i;

printf("请分别输入学生的学号、姓名及语数外成绩\n");
for (i = 0; i < n; i++)
{
printf("请输入第%d位同学的信息:", i + 1);
scanf_s("%d%s%lf%lf%lf", &p[i].id, p[i].name, &p[i].chinese, &p[i].maths, &p[i].english);
}

}

void OutputStruct(struct student*p, int n)
{
int i;
printf("学号\t 姓名\t 语文\t\t 数学\t\t 英语\t\t 均分\n");
for (i = 0; i < n; i++)
{
p[i].ave = (p[i].chinese + p[i].maths + p[i].english) / 3;
printf("%d \t %s \t %lf \t %lf \t %lf \t %lf\n", p[i].id, p[i].name, p[i].chinese, p[i].maths, p[i].english, p[i].ave);
}

}
展开
 我来答
ccccccc12
2016-12-18 · TA获得超过428个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:299万
展开全部
看过你的代码了,思路没有问题!
不要用scanf_s,直接用scanf,前面那个函数需要多一个参数表示读取几个字节,很麻烦
追问
大哥,vs2015不给用scanf啊,经常出错提示unsafe,不然我从hello world开始就用scanf了
追答
scanf( )在读取时不检查边界,所以可能会造成内存访问越界,这需要我们自己检查注意。不太建议用scanf_s,毕竟他不是标准C的函数,而是微软VS自己开发的,且C注重效率所以检查才不那么严格,这也是C的灵活之处。建议你用DEV-CPP  gcc编译器
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式