From 70c2372c09036c7aa7d3b3c40ec9d85c0d912a37 Mon Sep 17 00:00:00 2001 From: Wenzel Date: Sun, 1 Nov 2026 23:50:48 +0100 Subject: [PATCH] =?UTF-8?q?Kommentar=20und=20Struktur=20nochmal=20=C3=BCbe?= =?UTF-8?q?rpr=C3=BCft=20und=20verbessert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Startcode/input.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Startcode/input.c b/Startcode/input.c index 67f00a8..4027a8f 100644 --- a/Startcode/input.c +++ b/Startcode/input.c @@ -7,14 +7,17 @@ static char *liesWort(FILE *file, char *puffer, unsigned int pufferGroesse) { int laenge = 0; + // Ungültige Zeiger oder Puffergrößen abfangen if (file == NULL || puffer == NULL || pufferGroesse == 0) { return NULL; } + // Schutz vor Pufferüberlauf if (fgets(puffer, (int)pufferGroesse, file) == NULL) { return NULL; } + // \n oder \r am Ende abschneiden und durch \0 ersetzen laenge = (int)strlen(puffer); if (laenge > 0 && puffer[laenge - 1] == '\n') { puffer[laenge - 1] = '\0'; @@ -38,34 +41,46 @@ int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount) char *wort = NULL; const char *trennzeichen = " ,;\t\r\n"; + // Wenn Zeiger ungültig oder kein Platz im Array programm abbrechen if (file == NULL || words == NULL || maxWordCount == 0) { return 0; } - + // Zeile für Zeile aus der Datei einlesen while (anzahlWoerter < (int)maxWordCount && liesWort(file, zeilenPuffer, sizeof(zeilenPuffer)) != NULL) { + + // Wort aus der Zeile herausziehen wort = strtok(zeilenPuffer, trennzeichen); + // Wörter nacheinander verarbeiten while (wort != NULL && anzahlWoerter < (int)maxWordCount) { + + // Leerzeichen am Wortanfang überspringen while (*wort == ' ' || *wort == '\t') { wort++; } + // Falls kein leerzeichem mehr kommt, Wort überspringen if (*wort == '\0') { wort = strtok(NULL, trennzeichen); continue; } + // Kleinbuchstaben in Großbuchstaben umwandeln for (i = 0; wort[i] != '\0'; i++) { wort[i] = (char)toupper((unsigned char)wort[i]); } - strncpy(words[anzahlWoerter], wort, MAX_WORD_LEN - 1); + // Wort ins Zielarray kopieren und \0 setzen + strncpy(words[anzahlWoerter], wort, MAX_WORD_LEN - 1); words[anzahlWoerter][MAX_WORD_LEN - 1] = '\0'; anzahlWoerter++; + // Nächstes Wort aus der Zeile holen wort = strtok(NULL, trennzeichen); } } + + // Anzahl der Wörter zurückgeben return anzahlWoerter; }