sscanf() macht nicht das, was ich will...



  • Ich programmier eigentlich Java, aber jetzt muss ich mal was in c machen...

    Das Problem ist folgendes:

    Ich hab ein Textfile, desen Zeilen jeweils so aussehen:

    ReceiverID dd at xxxxxxxx Receiver cccccccc Sl:dd

    wobei d = digit, c=char und xxxxxxx eine beliebig lange url ist.

    Ich möchte nun den Achttelligen String hinter Receiver auslesen und speichern.

    Das hab ich folgendermaßen probiert:

    FILE *f=fopen("/tmp/file.txt", "rt");
    char idArray[8];
    
    if (f)
    {
     	int len = 0;
    	while(fgets(buf, 256, f))
    	{
    			sscanf(buf, "Receiver %8s Sl",  idArray);
    	}
    	fclose(f);
    }
    

    Allerdings speichert er mir dann nicht wie gewünscht den achstelligen String, sondern das "ID" von ReceiverID.

    Jemand ne Ahnung wie man das lösen könnte?



  • scanf() liest nur bis zum ersten Leerzeichen.

    musst wohl den string von hand auswerten



  • Horst2 schrieb:

    scanf() liest nur bis zum ersten Leerzeichen.

    das kann man aber auch ändern durch bestimmte zeichen im format-string. sorry, aber ich weiss leider auch nicht mehr wie's aussehen muss



  • string: "Daten string1 hallo string2 ID 4711"

    Code:

    sscanf(string, "Daten %s hallo %s, ID %d", string1, string2, int1);
    

    Mir ist es nur so bekannt, aber ich benutze scanf() auch eher selten



  • Ok, danke, es klappt so 😉

    Dachte sscanf wär so ne art suchfunktion 😉



  • Mal ein anderes Problem. Ich will doch nur den Vornamen und Nachnamen in ein Array abspeichern, das Einlesen klappt auch, aber mit der Ausgabe habert es noch, woran liegt das?

    struct Mappe{
       char *nachname;
       char *vorname;
       int note;
    
       };
    
      struct Mappe Person[3];
    
      printf("%s\n", "Namen eingeben:");  
      scanf("%s %s ", Person[0].nachname, Person[0].vorname);
      printf("\n%s%s%s", "Person: ", Person[0].nachname, Person[0].vorname);
    


  • Fehler gefunden, habe & vergessen! 😃



  • anfang schrieb:

    Fehler gefunden, habe & vergessen! 😃

    Du schreibst aber trotzdem fleissig in's Nirvana. Du solltest schon speicher für "nachname" und "vorname" reservieren. So wird das nix...



  • ne das Auslesen klappt immer noch nicht wie ich es will. 😞



  • Mach's mal so:

    #include <stdio.h>
    
    #define BUFFER_SIZE 20
    #define ARRAY_SIZE 3
    
    struct Mappe{
            char nachname[BUFFER_SIZE];
            char vorname[BUFFER_SIZE];
            int note;
    };
    
    struct Mappe Person[ARRAY_SIZE];
    
    char buffer[BUFFER_SIZE];
    
    int i;
    
    int main(void){
    
            for(i=0;i<ARRAY_SIZE;i++){
                    printf("%d. Namen eingeben: ",i+1);  
                    fgets(buffer,sizeof(buffer),stdin);
                    sscanf(buffer,"%s %s ", &Person[i].nachname, &Person[i].vorname);
            }
    
            for(i=0;i<ARRAY_SIZE;i++){
                    printf("\nPerson: %s %s\n", Person[i].nachname, Person[i].vorname);
            }
            return 0;
    }
    

    Edit: Arraydimensionen mit #define festgelegt



  • TactX schrieb:

    Mach's mal so:

    #include <stdio.h>
    
    #define BUFFER_SIZE 20
    #define ARRAY_SIZE 3
    
    struct Mappe{
            char nachname[BUFFER_SIZE];
            char vorname[BUFFER_SIZE];
            int note;
    };
    
    struct Mappe Person[ARRAY_SIZE];
    
    char buffer[BUFFER_SIZE];
    
    int i;
    
    int main(void){
    
            for(i=0;i<ARRAY_SIZE;i++){
                    printf("%d. Namen eingeben: ",i+1);  
                    fgets(buffer,sizeof(buffer),stdin);
                    sscanf(buffer,"%s %s ", &Person[i].nachname, &Person[i].vorname);
            }
    
            for(i=0;i<ARRAY_SIZE;i++){
                    printf("\nPerson: %s %s\n", Person[i].nachname, Person[i].vorname);
            }
            return 0;
    }
    

    Edit: Arraydimensionen mit #define festgelegt

    Warum benutzt du hier globale Variablen?

    Caipi



  • Caipi schrieb:

    Warum benutzt du hier globale Variablen?

    Weil es für dieses Beispiel scheissegal ist.


Anmelden zum Antworten