问:奖学金分为五种,不限名额,每位学生可同时获得多项奖学金。我得计算每个学生的奖学金。
我的代码是:

#include <stdio.h>

struct Student
{
    char name[21];
    int score1;
    int score2;
    char leader;
    char west;
    int paper;
    int sum;
};
int main(void)
{
    struct Student stu[100];
    int money_get(struct Student stu[],int m);
    int i,n;
    scanf("%d",&n);   //n is the number of student
    for(i=0;i<n;i++)  //input every student's information
    {
        scanf("%s %d %d %c %c %d",stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].leader,&stu[i].west,&stu[i].paper);
        stu[i].sum=money_get(&stu[i],i);
    }

    for(i=0;i<n;i++)    //output every student's name and their scholarship
        printf("%-21s%d\n",stu[i].name,stu[i].sum);
    return 0;
}

int money_get(struct Student stu[],int m)
{
    int money;
    money=0;

    //the conditons of the five scholarship

    if(stu[m].score1>85&&stu[m].score2>80)
        money+=4000;
    if(stu[m].score1>80&&stu[m].paper>0)
        money+=8000;
    if(stu[m].score1>90)
        money+=2000;
    if(stu[m].score1>85&&stu[m].west=='Y')
        money+=1000;
    if(stu[m].score2>80&&stu[m].leader=='Y')
        money+=850;
    return money;
}

输入是:
4
Tom 87 82 Y N 0
Jack 88 78 N Y 1
Jane 92 88 N N 0
Bob 83 87 Y N 1

输出应该是:
Tom 4850
Jack 9000
Jane 6000
Bob 8850

但它是:
Tom 4850
Jack 0
Jane 2000
Bob 2000

它只对第一个学生有效。你能告诉我哪里错了吗?

最佳答案

你的问题
您正在将&stu[i]传递到money_get()

stu[i].sum = money_get(&stu[i], i);

因此,您将一个指向stu[i]的指针作为参数传递,但是在money_get()中,您确实需要stu[m],其中stu已经是指向stu[i]的指针。
解决方案
money_get()只应将指向单个Student的指针作为参数。
然后stu[m].可以替换为stu->
例子:
int money_get(struct Student *stu)
{
    int money = 0;

    if (stu->score1 > 85 && stu->score2 > 80)
        money += 4000;
    if (stu->score1 > 80 && stu->paper > 0)
        money += 8000;
    if (stu->score1 > 90)
        money += 2000;
    if (stu->score1 > 85 && stu->west == 'Y')
        money += 1000;
    if (stu->score2 > 80 && stu->leader == 'Y')
        money += 850;
    return money;
}

您可以将此版本的money_get()称为:
stu[i].sum = money_get(&stu[i]);

关于c - 无法打印预期结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49669352/

10-11 03:24