Kommentar und Struktur nochmal überprüft und verbessert
This commit is contained in:
1 parent
38dc579bbc
commit
70c2372c09
1 file changed
+17
-2
+17
-2
@@ -7,14 +7,17 @@
|
|||||||
static char *liesWort(FILE *file, char *puffer, unsigned int pufferGroesse) {
|
static char *liesWort(FILE *file, char *puffer, unsigned int pufferGroesse) {
|
||||||
int laenge = 0;
|
int laenge = 0;
|
||||||
|
|
||||||
|
// Ungültige Zeiger oder Puffergrößen abfangen
|
||||||
if (file == NULL || puffer == NULL || pufferGroesse == 0) {
|
if (file == NULL || puffer == NULL || pufferGroesse == 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Schutz vor Pufferüberlauf
|
||||||
if (fgets(puffer, (int)pufferGroesse, file) == NULL) {
|
if (fgets(puffer, (int)pufferGroesse, file) == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// \n oder \r am Ende abschneiden und durch \0 ersetzen
|
||||||
laenge = (int)strlen(puffer);
|
laenge = (int)strlen(puffer);
|
||||||
if (laenge > 0 && puffer[laenge - 1] == '\n') {
|
if (laenge > 0 && puffer[laenge - 1] == '\n') {
|
||||||
puffer[laenge - 1] = '\0';
|
puffer[laenge - 1] = '\0';
|
||||||
@@ -38,34 +41,46 @@ int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
|
|||||||
char *wort = NULL;
|
char *wort = NULL;
|
||||||
const char *trennzeichen = " ,;\t\r\n";
|
const char *trennzeichen = " ,;\t\r\n";
|
||||||
|
|
||||||
|
// Wenn Zeiger ungültig oder kein Platz im Array programm abbrechen
|
||||||
if (file == NULL || words == NULL || maxWordCount == 0) {
|
if (file == NULL || words == NULL || maxWordCount == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
// Zeile für Zeile aus der Datei einlesen
|
||||||
while (anzahlWoerter < (int)maxWordCount && liesWort(file, zeilenPuffer, sizeof(zeilenPuffer)) != NULL) {
|
while (anzahlWoerter < (int)maxWordCount && liesWort(file, zeilenPuffer, sizeof(zeilenPuffer)) != NULL) {
|
||||||
|
|
||||||
|
// Wort aus der Zeile herausziehen
|
||||||
wort = strtok(zeilenPuffer, trennzeichen);
|
wort = strtok(zeilenPuffer, trennzeichen);
|
||||||
|
|
||||||
|
// Wörter nacheinander verarbeiten
|
||||||
while (wort != NULL && anzahlWoerter < (int)maxWordCount) {
|
while (wort != NULL && anzahlWoerter < (int)maxWordCount) {
|
||||||
|
|
||||||
|
// Leerzeichen am Wortanfang überspringen
|
||||||
while (*wort == ' ' || *wort == '\t') {
|
while (*wort == ' ' || *wort == '\t') {
|
||||||
wort++;
|
wort++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Falls kein leerzeichem mehr kommt, Wort überspringen
|
||||||
if (*wort == '\0') {
|
if (*wort == '\0') {
|
||||||
wort = strtok(NULL, trennzeichen);
|
wort = strtok(NULL, trennzeichen);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Kleinbuchstaben in Großbuchstaben umwandeln
|
||||||
for (i = 0; wort[i] != '\0'; i++) {
|
for (i = 0; wort[i] != '\0'; i++) {
|
||||||
wort[i] = (char)toupper((unsigned char)wort[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';
|
words[anzahlWoerter][MAX_WORD_LEN - 1] = '\0';
|
||||||
|
|
||||||
anzahlWoerter++;
|
anzahlWoerter++;
|
||||||
|
|
||||||
|
// Nächstes Wort aus der Zeile holen
|
||||||
wort = strtok(NULL, trennzeichen);
|
wort = strtok(NULL, trennzeichen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Anzahl der Wörter zurückgeben
|
||||||
return anzahlWoerter;
|
return anzahlWoerter;
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user