0

私は C の youtube でチュートリアル シリーズをフォローします。私が見る限り、私のコードは彼のものとまったく同じですが、成績の整数を出力すると、整数のアドレスが出力されます。しかし、文字列は問題なく出力されます。コード:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char *name;
    int science, history, math, english;

} reportCard;

void printReportCard(reportCard *rc);

int main() {
    reportCard r1;
    r1.name = "Daniel Pendergast";
    r1.science = "80";
    r1.history = "90";
    r1.math = "100";
    r1.english = "80";

    printReportCard(&r1);
    return 0;
}

void printReportCard(reportCard *rc) {
    int average = (rc->science + rc->history + rc->math + rc->english) / 4;
    printf("Student's name: %s\nScience grade: %i\nHistory grade: %i\nMath grade: %i\nEnglish grade: %i\nOVERALL GRADE: %i",
    rc->name, rc->science, rc->history, rc->math, rc->english, average);
}
4

2 に答える 2

7

これらは int への char ポインターの割り当てです (明確でない場合は無効です)。

r1.science = "80";
r1.history = "90";
r1.math = "100";
r1.english = "80";

次のようにする必要があります。

r1.science = 80;
r1.history = 90;
r1.math = 100;
r1.english = 80;

コンパイラの警告を確認しましたか?

于 2012-08-02T13:03:55.070 に答える
0

r1.science = "80";- これは80、テキスト セグメント (読み取り専用データ) の文字列として保持され、その文字列の仮想アドレスが に割り当てられ80ますr1.science

以下のように値を整数として割り当てます

r1.science = 80; 
r1.history = 90; 
r1.math = 100; 
r1.english = 80;
于 2012-08-02T14:02:30.650 に答える