88 lines
2.7 KiB
C
88 lines
2.7 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
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;
|
|
} |