c언어 질문드려요

조회수 782회

뒤늦게 편입을해서 거의 사실상 독학중인 한 학생입니다. 과제로 성적관리 프로그램을 작성중인데 막히는 부분이 있어 질문드려요

  1. void In에서 입력을 받도록 설정하였는데 stues[i]가 입력을 받을때마다 올라가야하는데 올라가질 않네요 ㅠㅠ (2명을 입력한다치면 0부터 시작하니 [0]이름/[0]국어/[0]영어/[0]수학 -> [1]이름.....)
  2. 1번 질문과 비슷한 맥락인거 같은데 저장 및 출력되는 번호가 [1]부터 시작되도록 하고 싶습니다

pragma warning (disable:4996)

include

include

include

include

define MAX_NAME 10

typedef struct { int num; char name[MAX_NAME]; int kor; int eng; int mat; }Student;

Student *stues; int max_student; void start(); void Run();

int main(void) { start(); Run(); free(stues); return 0; }

void start() { printf("Enter the number of students:"); scanf_s("%d", &max_student); printf("%d students can be stored.\n", max_student); printf("Program Start!\n"); stues = (Student*)malloc(sizeof(Student)*max_student); memset(stues, 0, sizeof(Student)*max_student); }

int Menu(); void In(); void Del(); void Cal(); void Pri();

void Run() { int key = 0; while ((key = Menu()) != 5) { switch (key) { case 1: In(); break; case 2: Del(); break; case 3: Cal(); break; case 4: Pri(); break; default: break; } } }

int Menu() { int key = 0; printf("1. Insert a student\n2. Delete a student\n3. Calculate average\n4. Print all students\n5. Exit\n"); scanf_s("%d", &key); return key; }

void In() { for (int i = 0; i < max_student; i++) { printf("[%d] Name:", stues[i].num); scanf("%s", &stues[i].name); printf("[%d] Korean:", stues[i].num); scanf("%d", &stues[i].kor); printf("[%d] Math:", stues[i].num); scanf("%d", &stues[i].eng); printf("[%d] English:", stues[i].num); scanf("%d", &stues[i].mat); } }

void Del() { char na[MAX_NAME]; printf("Enter the name of student:"); scanf("%s", na);

for (int i = 0; i < max_student; i++) {
    if (strcmp(stues[i].name, na) == 0) {
        for (int j = i; j < max_student-1; j++); {
            stues[i] = stues[i + 1];
            max_student--;
        }
        printf("The data of %s is deleted", stues[i].name);
    }
}

}

void Cal() { char na[MAX_NAME]; printf("Enter the name of student:"); scanf("%s", na);

for (int i = 0; i < max_student; ++i) {
    double total = stues[i].kor + stues[i].eng + stues[i].mat;
    if (!strcmp(stues[i].name, na)) {
        printf("%s's average is %.1lf", stues[i].name, total/3);
    }
}

}

void Pri() { for (int i = 0; i < max_student; i++) { printf("[%d]Name:%s\n", stues[i].num, stues[i].name); printf("[%d]Korean:%d\n", stues[i].num, stues[i].kor); printf("[%d]Math:%d\n", stues[i].num, stues[i].eng); printf("[%d]English:%d\n", stues[i].num, stues[i].mat); } }

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAX_NAME 10
    
    typedef struct {
        int num;
        char name[MAX_NAME];
        int kor;
        int eng;
        int mat;
    } Student;
    
    Student *stues;
    int max_student = 0;
    int last_student_idx = 0;
    int idx = 1;
    
    void start();
    void Run();
    int Menu();
    void In();
    void Del();
    void Cal();
    void Pri();
    
    int main(void)
    {
        start();
        Run();
        free(stues);
        return 0;
    }
    
    void start()
    {
        printf("Enter the number of students:");
        scanf("%d", &max_student);
        printf("%d students can be stored.\n", max_student);
        printf("Program Start!\n");
        stues = (Student*)malloc(sizeof(Student) * max_student);
        memset(stues, 0, sizeof(Student) * max_student);
    }
    
    void Run()
    {
        int key = 0;
        while ((key = Menu()) != 5)
        {
            switch (key)
            {
                case 1:
                    In();
                    break;
                case 2:
                    Del();
                    break;
                case 3:
                    Cal();
                    break;
                case 4:
                    Pri();
                    break;
                default:
                    break;
                }
        }
    }
    
    int Menu()
    {
        int key = 0;
        printf("\n1. Insert a student\n2. Delete a student\n3. Calculate average\n4. Print all students\n5. Exit\n");
        scanf("%d", &key);
        return key;
    }
    
    void In()
    {
        if(last_student_idx >= max_student)
        {
            printf("더 이상 추가할 수 없습니다");
            return;
        }
    
        stues[last_student_idx].num = idx;
    
        printf("[%d] Name:", idx);
        scanf("%s", stues[last_student_idx].name);
    
        printf("[%d] Korean:", idx);
        scanf("%d", &stues[last_student_idx].kor);
    
        printf("[%d] Math:", idx);
        scanf("%d", &stues[last_student_idx].eng);
    
        printf("[%d] English:", idx);
        scanf("%d", &stues[last_student_idx].mat);
    
        idx++;
        last_student_idx++;
    }
    
    void Del()
    {
        int i, j;
        char na[MAX_NAME];
        printf("Enter the name of student:");
        scanf("%s", na);
    
        for (i = 0; i < last_student_idx; i++)
        {
            if (strcmp(stues[i].name, na) == 0)
            {
                printf("The data of %s is deleted", stues[i].name);
                for (j = i; j < last_student_idx - 1; j++)
                {
                    stues[j] = stues[j + 1];
                }
                last_student_idx--;
            }
        }
    }
    
    void Cal()
    {
        int i;
        char na[MAX_NAME];
        double total;
        printf("Enter the name of student:");
        scanf("%s", na);
    
        for (i = 0; i < max_student; ++i)
        {
            if (!strcmp(stues[i].name, na))
            {
                total = stues[i].kor + stues[i].eng + stues[i].mat;
                printf("%s's average is %.1lf\n", stues[i].name, total/3);
            }
        }
    }
    
    void Pri()
    {
        int i;
        printf("*****총 원 %d명*****\n\n", last_student_idx);
        for (i = 0; i < last_student_idx; i++)
        {
            printf("[%d]Name:%s\n", stues[i].num, stues[i].name);
            printf("[%d]Korean:%d\n", stues[i].num, stues[i].kor);
            printf("[%d]Math:%d\n", stues[i].num, stues[i].eng);
            printf("[%d]English:%d\n\n", stues[i].num, stues[i].mat);
        }
        printf("*******************\n");
    }
    
    

    실행해 보시고 코드도 분석해보시길 바랍니다...

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)