Структура "Студент" - 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 идет пустой блок кода.