bugfix> c > 投稿

質問: 5種類の奨学金があり、授与される奨学金の数に制限はなく、各学生は同時に複数の奨学金を受け取ることができます。各学生の奨学金を計算する必要があります。

私のコードは:

#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

これは最初の生徒にのみ有効です。どこが間違っているのか教えてください。

回答 1 件
  • あなたの問題

    あなたは &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]);
    
    

あなたの答え