#include #include #include typedef struct Schueler { char name[30]; char vorname[30]; int note; } Schueler_t; int main() { Schueler_t *klasse = NULL; // Dynamisches Array für Schüler int anzahl = 0; // Aktuelle Anzahl der Schüler int kapazitaet = 0; // Aktuelle Kapazität des Arrays int summe = 0; int haeufigkeit[6] = {0}; // Notenspiegel while (1) { // Speicher vergrößern, falls nötig if (anzahl >= kapazitaet) { kapazitaet = kapazitaet == 0 ? 10 : kapazitaet * 2; Schueler_t *tmp = realloc(klasse, kapazitaet * sizeof(Schueler_t)); if (!tmp) { printf("Speicherfehler!\n"); free(klasse); return 1; } klasse = tmp; } printf("\n----Eingabe des %d. Schuelers----\n", anzahl + 1); printf("Name (oder ENTER zum Beenden): "); if (fgets(klasse[anzahl].name, sizeof(klasse[anzahl].name), stdin) == NULL) break; klasse[anzahl].name[strcspn(klasse[anzahl].name, "\n")] = 0; if (klasse[anzahl].name[0] == '\0') break; printf("Vorname: "); if (fgets(klasse[anzahl].vorname, sizeof(klasse[anzahl].vorname), stdin) == NULL) break; klasse[anzahl].vorname[strcspn(klasse[anzahl].vorname, "\n")] = 0; do { printf("Note (1-6): "); if (scanf("%d", &klasse[anzahl].note) != 1) { while (getchar() != '\n'); printf("Ungültige Eingabe. Abbruch.\n"); free(klasse); return 1; } } while (klasse[anzahl].note < 1 || klasse[anzahl].note > 6); // Eingabepuffer leeren (wegen scanf) while (getchar() != '\n'); summe += klasse[anzahl].note; haeufigkeit[klasse[anzahl].note - 1]++; anzahl++; } if (anzahl == 0) { printf("Keine Schüler eingegeben.\n"); free(klasse); return 0; } // Übersicht ausgeben printf("\n%-4s %-15s %-15s %-5s\n", "Nr.", "Name", "Vorname", "Note"); for (int i = 0; i < anzahl; i++) { printf("%-4d %-15s %-15s %-5d\n", i + 1, klasse[i].name, klasse[i].vorname, klasse[i].note); } // Durchschnittsnote double durchschnitt = (double)summe / anzahl; printf("\n....Durchschnittsnote: %.2f\n", durchschnitt); // Notenspiegel printf("....Notenspiegel\n"); for (int i = 0; i < 6; i++) { printf("Note %d: ", i + 1); for (int j = 0; j < haeufigkeit[i]; j++) { printf("*"); } printf("\n"); } free(klasse); return 0; }