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