Структура "Студент" - 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", ¤tStudent->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
. В зависимости от этого значения, выводится определенная строка на экран.
Вот список действий, которые выполняются в этом коде:
- Проверяется значение переменной
result
. - Если значение равно VERY_BAD, то выводится строка
PLOXO
. - Если значение равно BAD, то выводится строка
PLOXXXO
. - Если значение равно NORMAL, то выводится строка
NORMAL
. - Если значение равно GOOD, то выводится строка
XOPOSHO
. - В каждом случае, после вывода строки, выполняется пустой блок кода //break; который необходим для прерывания выполнения оператора switch, когда значение переменной
result
не равно ни одному из указанных вариантов. Обратите внимание, что оператор break; не выполняется после каждого case, поскольку в данном коде после каждого case идет пустой блок кода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д