[C] struct, union 의 결합

#include 
typedef union {
    double math;
    double phys;
    double chem;
} Score;

typedef struct student {
    char name[10];
    int age;
    Score grade;
    char whichSubject;
} Student;

void input(Student *s) {
    printf("input your name: ");
    scanf("%s", s->name);
    printf("input your age: ");
    scanf("%d", &s->age);
    printf("which subject m/p/c: ");
    scanf(" %c", &s->whichSubject); //<
    switch (s->whichSubject) {
        case 'm': scanf("%lf", &s->grade.math); break;
        case 'p': scanf("%lf", &s->grade.phys); break;
        case 'c': scanf("%lf", &s->grade.chem); break;
    }
}

void print(Student *s) {
    switch (s->whichSubject) {
        case 'm': printf("My name is %s, and I'm %d. I got %f in Math
", s->name, s->age, s->grade.math); break; case 'p': printf("My name is %s, and I'm %d. I got %f in Physics
", s->name, s->age, s->grade.phys); break; case 'c': printf("My name is %s, and I'm %d. I got %f in Chemistry
", s->name, s->age, s->grade.chem); break; } } int main( ) { Student s1; input(&s1); print(&s1); return 0; }

 
 
배열 과 결합 하 다.
//struc, union, array  
#include 
typedef union {
    double math;
    double phys;
    double chem;
} Subject;

typedef struct {
    char name[20];
    int age;
    Subject scores;
    char whichSubject;
} Student;

void input(Student *s, int n) {
    for (int i = 0; i < n; ++i) {
        printf("input your name: ");
        scanf(" %19[^
]
", s[i].name); //" %19[^
]"
printf("input your age: "); scanf("%d", &s[i].age); printf("which subject m/p/c: "); scanf(" %c", &s[i].whichSubject); //" %c" switch ( s[i].whichSubject ) { case 'm': printf("input your math score: "); scanf("%lf", &s[i].scores.math); break; case 'p': printf("input your physics score: "); scanf("%lf", &s[i].scores.phys); break; case 'c': printf("input your chemistry score: "); scanf("%lf", &s[i].scores.chem); break; } } } double getAve(Student *s, int n) { double sum = 0; int i; for ( i = 0; i < n; ++i ) { switch (s[i].whichSubject) { case 'm': sum += s[i].scores.math; break; case 'p': sum += s[i].scores.phys; break; case 'c': sum += s[i].scores.chem; break; } } return sum / n; } void display(Student *s, int n) { for ( int i = 0; i < n; ++i ) { switch (s[i].whichSubject) { case 'm': printf("%s's math score is %f
", s[i].name, s[i].scores.math); break; case 'p': printf("%s's physics score is %f
", s[i].name, s[i].scores.phys); break; case 'c': printf("%s's chemistry score is %f
", s[i].name, s[i].scores.chem); break; } } } int main() { const int size = 2; Student stu[size]; input(stu, size); printf("average = %f
", getAve(stu, size)); display(stu, size); }

좋은 웹페이지 즐겨찾기