Структура "Студент" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите сделать структуре имя, т е что бы в выводе не по умочанию выводилось 0 1 2 3 и тд, а например вместо 0 - хорошо, 1 - плохо и тд вот код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <stdbool.h>
 
typedef enum {
    VERY_BAD,
    BAD,
    NORMAL,
    GOOD
} result;
 
typedef struct {
    int exams[5];
    result result;
} session;
 
typedef struct {
    char lastName[100];
    session session;
} student;
 
result sessionResult(int *exams){
    result mark = GOOD;
    
    for (int i=0; i<sizeof(exams)/sizeof(int); i++) {
        if (exams[i] < 5)
            mark = NORMAL;
        else if (exams[i] < 5)
            mark = BAD;
        else if (exams[i] < 2)
            mark = VERY_BAD;
    }
    
    return mark;
}

int main(void)
{
    
    FILE *file;
    char* file_name = "students.txt";
    bool done = false;
    char lastName[100] = "";
    student students[5];
    student* currentStudent;
    
    file = fopen(file_name, "w");
    if (file)
    {
        int count = 0;
        printf("Vvedite familii studentov ("."-Zakonchit vvod):\n");
 
        do
        {
            scanf("%s", lastName);
            if (strcmp(lastName, "."))
            {
                fprintf(file, "%s\n", lastName);
                count++;
            }
            else done = true;
            if (count >= 50) done = true;
            
        } while(!done);
        fclose(file);
        
        file = fopen(file_name, "r");
        if (file)
        {
            count = 0;
            currentStudent = &students[count];
            
            printf("\nVvedite ocenki po ekzamenam (5 predmetov):\n");
            while (fgets(currentStudent->lastName, 100, file))
            {
 
                currentStudent->lastName[strlen(currentStudent->lastName)-1] = 0;
                printf("%s: ", currentStudent->lastName);
                
                for(int i=0; i< 5; i++){
                    scanf("%d", &currentStudent->session.exams[i]);
                }
            
                currentStudent->session.result = sessionResult(currentStudent->session.exams);
                count++;
                currentStudent = &students[count];
            }
            fclose(file);
            
            for (int i = 0; i < count; i++) {
                printf("%s, %d\n", students[i].lastName, students[i].session.result);
            }

            /*printf("\nSpisok:\n");
             file = fopen("students.txt","r");
             fgets(file);
             fclose(file);*/

            //system ("pause");

        }
    }
}

Решение задачи: «Структура "Студент"»

textual
Листинг программы
switch (result) {
                case VERY_BAD: printf("PLOXO");
                    //break;
                case BAD: printf ("PLOXXXO");
                    //break;
                case NORMAL: printf ("NORMAL");
                    //break;
                case GOOD: printf ("XOPOSHO");
                    //break;
            }

Объяснение кода листинга программы

В представленном коде выполняется оператор switch, который проверяет значение переменной result. В зависимости от этого значения, выводится определенная строка на экран. Вот список действий, которые выполняются в этом коде:

  1. Проверяется значение переменной result.
  2. Если значение равно VERY_BAD, то выводится строка PLOXO.
  3. Если значение равно BAD, то выводится строка PLOXXXO.
  4. Если значение равно NORMAL, то выводится строка NORMAL.
  5. Если значение равно GOOD, то выводится строка XOPOSHO.
  6. В каждом случае, после вывода строки, выполняется пустой блок кода //break; который необходим для прерывания выполнения оператора switch, когда значение переменной result не равно ни одному из указанных вариантов. Обратите внимание, что оператор break; не выполняется после каждого case, поскольку в данном коде после каждого case идет пустой блок кода.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы