fgets-Funktion, Daten in Variable speichern



  • Bitte kann mir jemand verständlich C erklären - Neuankömmling.
    Habe eine Musterlösung vom Professor bekommen, verstehe jedoch eine Funktion nicht.

    #define MAX_LINE_LEN      40
    
    struct DetailsAccount
    {
      unsigned int        bank_code;
      unsigned long long  account_number;
    };
    
    int main (void)
    { int
        ret = EXIT_SUCCESS;               /* Statuscode der Applikation */
      FILE
       *iban_file;                        /* Kontendatei `iban.txt' */
      char
        remittee [MAX_LINE_LEN + 1],      /* Empfänger maximal 30-stellig */
        iban [MAX_IBAN_LENGTH + 1],       /* IBAN maximal 66-stellig */
        details_file [14 + 1];            /* Konto_DDDD.txt */
      struct DetailsAccount
        account_details;        
    
    }
    
    static int LoadAccount (FILE *iban_file,
                            char remittee [], char iban [], char details_filename [])
    {
    
      if(fgets(remittee,MAX_LINE_LEN,iban_file)==NULL){
        if(feof(iban_file))
          return(EOF); 
        if(ferror(iban_file))
          fprintf(stderr,"LoadAccount:%s",strerror(errno));
          return(-1);
      }
    
    if(fgets(iban,MAX_LINE_LEN,iban_file)==NULL){
        if(feof(iban_file))
          return(EOF); 
        if(ferror(iban_file))
          fprintf(stderr,"LoadAccount:%s",strerror(errno));
          return(-1);
      }
    

    Code nicht ganz vollständig, jedoch sollte man Daten aus der IBAN_File in die jeweils richtige Variable speichern.

    IBAN_FILE.txt sieht so aus:
    Billa ReisenAT63 3500 0000 0040 6805Konto_0001.txtMenschen für MenschenAT28 3200 0000 0022 2000Konto_0002.txt [..]

    fgets-Funktion "fgets(Variable, Länge, Datei)"

    Hab ich verstanden.
    Jedoch ist die Länge doch immer 40?

    Somit müsste in 'remittee' die ersten 40 Zeichen der IBAN_FILE stehen, wie folgt:
    Billa ReisenAT63 3500 0000 0040 6805Konto_000

    Das ergibt für mich keinen Sinn?
    Wären in der Datei Umbrüche könnte man dies ja abfragen, dort ist aber alles in einer Wurst geschrieben?



  • RonnyPe schrieb:

    Wären in der Datei Umbrüche könnte man dies ja abfragen, dort ist aber alles in einer Wurst geschrieben?

    Woher weißt du das?



  • Woher ich weiß das alles in einer Wurst geschrieben ist? Die Datei liegt ja dabei als txt.



  • Nimm mal was anderes als notepad zum Anschaun... (nur für den Fall, dass der Zeilenumbruch ein einfaches \n ist.)



  • .....
    Mit Notepade++ sind Zeilenumbrüche vorhanden.
    Toll...hab's bisher immer mit Notepad geöffnet.

    Liest fgets somit Zeilenweise ein?



  • RonnyPe schrieb:

    Liest fgets somit Zeilenweise ein?

    Ja. man: fgets



  • Danke, jetzt macht der Code sinn!


  • Mod

    Hast du die Datei im Binaermodus geoeffnet?

    Und woher kommt diese dauernde Unsitte, Bankleitzahlen und Konotnummern als Zahlen zu modellieren? Hast du jemals mit einer Bankleitzahl gerechnet? Hast du jemals eine Bankleitzahl in Hexadezimalschreibweise gesehen? Hast du noch nie eine Kontonummer mit 0 am Anfang gesehen? Hast du noch nie eine Kontonummer mit mehr als 8 Stellen gesehen?

    Das sind Ziffernfolgen!
    Und Ziffern sind Zeichen.

    P.S.: Und Geld ist keine Fliesskommazahl!


Log in to reply