Problem mit fscanf()



  • Hi!

    Habe noch nicht allzuviel mit C programmiert, Grundkenntnisse sind jedoch vorhanden.

    Habe jetzt ein Proble mit der fscanf Funktion. Ich versuche aus einer dat Datei einzulesen, in der verschiedene Strings durch Ausrufezeichen getrennt stehen

    #include <stdio.h>
    
    int main(int argc, char **argv){
            FILE *datei;
            char kurz[6];
            char vname[24];
            char nname[24];
            char vkurz[6];
            char titel[3];
            int stringcount;
            datei=fopen("test.dat","r");
            stringcount=fscanf(datei,"%s!%s!%s!%s!%s\n",kurz,vname,nname,vkurz,titel);
            printf("Anzahl der eingelesenen Strings: %d",stringcount);
            fclose(datei);
    }
    

    in der Datei habe ich momentan zu Testzwecken nur eine Zeile:

    ABECA !Abückür !Andrüüs !A. !Dr.

    Wenn ich diesen Code so ausführe gibt mir fscanf als Anzahl eingelesener Strings eine 1 zurück und die komplette Zeile steht in "kurz".

    Was mache ich hier falsch?

    greetz
    Bosco



  • scanf() verwendet immer noch whitespace's als Tennzeichen (zumindest wenn du mit %s einliest) - wenn keine Leerzeichen in der Zeile vorkommen, wird alles mit einem Rutsch eingelesen.

    Als Lösung könnte ich dir nur eine andere Formatkennung vorschlagen: Ersetze die %s durch %[^!] (das liest solange Zeichen, bis ein '!' kommt).



  • Danke, damit liest er es richtig ein, stellt jedoch zumindest die ü's bei der Ausgabe nicht richtig dar. Muss ich für Sonderzeichen aus dem deutschen Alphabet (ü,ä,ö,ß) irgendetwas beachten?

    Noch als Anmerkung, ich hatte meinen Ansatz daraus abgeleitet:

    http://www.galileocomputing.de/openbook/c_von_a_bis_z/c_018_008.htm

    Da wird ja im Endeffekt nichts anderes gemacht, wie ich es vorhabe, nur dass statt ! ein , als Trennzeichen verwendet wird. Ist das im Buch dann falsch? Oder habe ich da was falsch verstanden?

    greetz Bosco



  • Bosco schrieb:

    Danke, damit liest er es richtig ein, stellt jedoch zumindest die ü's bei der Ausgabe nicht richtig dar. Muss ich für Sonderzeichen aus dem deutschen Alphabet (ü,ä,ö,ß) irgendetwas beachten?

    Ja, daß es Unterschiede gibt, wo im ASCII- (DOS) und ANSI- (Windows) Zeichensatz die Umlaute untergebracht sind.

    Da wird ja im Endeffekt nichts anderes gemacht, wie ich es vorhabe, nur dass statt ! ein , als Trennzeichen verwendet wird. Ist das im Buch dann falsch? Oder habe ich da was falsch verstanden?

    Der Unterschied liegt darin, daß die in dem Beispiel %d zur Eingabe verwendet haben - und das bricht bei allem ab, was keine Ziffer ist.
    (und bei dem Beispiel, was mit Strings arbeitet, verwenden sie auch %[])


Anmelden zum Antworten