Hi Christoph,
nee ... Christoph. Ludwig ist nur der Nachname ;)
sorry - finde ich aber auch irgendwie witzig ;-)
Somit kann ich der Funktion keine Parameter übergeben.
Aha. Naja gut, funktionieren muss es ja trotzdem.
oder welche Datentypen schlägst du bei
EAN -> 13 Zahlen -> long array[AnzahlDatensätze]
Artikel-Name -> max. 20 Zeichen -> char array[AnzahlDatensätze][21]
Preis -> max. 999,99€ -> float array[AnzahlDatensätze]
Steuersatz: -> 7% bzw. 19% -> int array[AnzahlDatensätze]
vor? (Dahinter stehen meine Datentypen. Sind diese zu klein?)
Lass Dir mal mit sizeof(long) anzeigen, wieviele Bytes Dir für ein long zur Verfügung gestellt werden. Üblicherweise sind das vier, und somit tatsächlich zu wenig für eine Zahl bestehend aus 13 Ziffern (9999999999999 braucht 6 Byte). Mit einer float-Zahl klappt es bei mir leider auch nicht richtig; es wird dann zwar ein Wert gelesen, der ist aber nicht korrekt (ich arbeite selten mit float-Zahlen, vielleicht weiss ein anderer da mehr). Aber brauchst Du hier überhaupt eine Zahl, tut es ev. auch ein String?
Ich habe das jetzt mal probiert, also einen Deiner Beispielstrings mit sscanf geparst folgendermaßen funktioniert das bei mir:
char zeile[] = "1234567891234;Birne ;0000.95;07";
float fEan = 0;
char name[200] = "";
float fPreis = 0;
int steuersatz = 0;
sscanf(zeile, "%f;%s ;%f;%d", &fEan, name, &fPreis, &steuersatz);
printf("fEan:%f name:%s preis:%f steuersatz:%d\n\n",
fEan, name, preis, steuersatz);
ergibt als Ausgabe:
fEan:1234567954432.000000 name:Birne preis:0.950000 steuersatz:7
Das Trennzeichen im Preis muss ein Punkt sein (kein Komma). Hinter dem %s muss vor dem ; noch ein Leerzeichen stehen, sonst liest er den Preis nicht richtig.
Ich glaube, Du hattest im sscanf-Aufruf auch die Namen-Variable falsch adressiert. Da ein string bereits ein Pointer auf einen Datenbereich ist, darf dort kein & mehr davor.
Vielleicht hilft Dir das schon mal weiter, ich muss gleich nach Hause und da habe ich derzeit keinen C-Compiler.
Ciao, Stefanie