AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [C] Erfolg prüfen ohne Rückgabewert
Thema durchsuchen
Ansicht
Themen-Optionen

[C] Erfolg prüfen ohne Rückgabewert

Ein Thema von silver-moon-2000 · begonnen am 11. Jan 2008 · letzter Beitrag vom 14. Jan 2008
 
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#1

[C] Erfolg prüfen ohne Rückgabewert

  Alt 11. Jan 2008, 14:43
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.
Code:
char *stringFeld[12][5]
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
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz