Hallo zusammen,
wir müssen als Leistungsnachweis in Info ein kurzes Programm, welches sich um Pointer dreht, schreiben.
Dazu haben wir vom Prof. eine Methode bekommen, um Daten aus einer Textdatei in ein "Array of Pointer" einzulesen.
Dummerweise sieht die Signatur dieser Methode so aus:
Code:
void createStringFeld(char *daten[12][5]);
soll heißen, sie hat keinen Rückgabewert, anhand dessen man überprüfen könnte, ob das stringFeld richtig befüllt wurde. Und wir dürfen auch die Methode nicht verändern (und z.B. einen Rückgabewert einbauen).
Die Methode an sich sieht so aus:
Code:
void createStringFeld(char *daten[12][5]){
FILE *pFile = fopen("daten.txt", "r");
// int zeilen=12; //Von mir Auskommentiert, da nicht verwendet
int spalten=5;
char file[20] = "Daten.txt";
char zeichen[2];
int i=0, zeile,spalte;
char *zString =(char *) malloc(2*sizeof (char));
zString[0] = '\0';
if (!pFile) {
printf(" Fehler beim Oeffnen der Datei %s\n", file);
return;
//-> hier hätte ich sonst den RückgabeWert eingebaut
}
zeichen[1] = '\0';
zeichen[0] = fgetc(pFile);
while(!feof(pFile)){
// evtl vorhandene Leerzeichen auslesen
while(zeichen[0] == ' '|| zeichen[0] =='\n'){
zeichen[0] = fgetc(pFile);
}
//printf("---> %c", zeichen[0]);
while ((zeichen[0] != ' ' && zeichen[0] != '\n') && !feof(pFile)){
zString = (char*)realloc(zString,strlen(zString)+ 2* sizeof (char));
strncat(zString,zeichen,1);
zeichen[0] = fgetc(pFile);
}
strcat(zString,"\0");
zeile = (int) i/spalten;
spalte = i%spalten;
daten[zeile][spalte] = zString;
i++;
// zString neu initialisieren
zString =(char *) malloc(2*sizeof (char));
zString[0] = '\0';
}
fclose(pFile);
return ;
}
Lange Einleitung, lange Frage...
Wie kann ich nun den Fehler abfangen, dass die Daten gar nicht eingelesen wurden (z.B. weil die Datei fehlt...).
Ich habe mir jetzt so beholfen (Ausschnitt aus der main Methode):
Code:
createStringFeld(stringFeld);
if (**stringFeld[0] != 'K') {
printf("StringField not filled! Abort...");
return EXIT_FAILURE;
}
...
Da ich die Daten kenne und weiß, dass als erstes der Name "Kraemer" im stringFeld steht, teste ich eben zur Zeit, ob der erste char das "K" ist.
Sonderlich hübsch finde ich das nicht, bei meinem (sehr) begrenzten Wissen will mir aber nichts Schöneres einfallen.
Ich wäre also dankbar, wenn sich jemand diesen Codeschnipsel mal anschauen und mir sagen könnte, ob das so in Ordnung ist, was ich mache.
p.s. Da es sich hier ja um einen Leistungsnachweis handelt, den ich "allein" machen soll, bitte ich darum, dass mir hier keine Lösungen o.Ä. präsentiert werden, sondern "nur" Denkansätze, wie ich weiter vorgehen kann/soll.
p.p.s: warum ich in dieses Forum schreibe, und nicht in ein C/C++ Forum?
-> Weil ich weiß, dass Ihr kompetent genug seid
-> Weil ich kein C/C++ Forum kenne