Punkt als Trennzeichen



  • Hallo, ich habe heute die Frage ob man bei dem Befehl fscanf den Punkt als Trennzeichen in einer besonderen weise(Präfix o.ä.) schreiben muss. Hierzu ein Beispiel:

    "q= fscanf(XX,"%lf.%lf", &variable1 , &variable2);"

    es soll eine Kommazahl Bsp. 8.589 getrennt eingelesen werden.

    Ich danke für eure Antworten.


  • Mod

    %lf ist der Formatspezifizierer für einen double. Der versucht nach Möglichkeit, einen double einzulesen. Dabei wird so lange gelesen, bis ein Zeichen nicht mehr zu einem double gehören kann. Was danach im Formatstring steht ist dabei vollkommen egal, die Unterfunktion, die den double liest, liest so lange wie sie kann. Da ein Punkt zu einem double gehören kann, wird da natürlich nicht aufgehört.

    Lösung1: Lies den Vor- und Nachkommateil getrennt als Ganzzahlen ein. Also:

    int vorkomma;
    unsigned nachkomma;
    scanf("%d.%u", &vorkomma , &nachkomma);"
    

    Lösung2: Lies die ganze Zahl als double ein und nutze Mathematik, um Vorkomma und Nachkomma zu trennen.

    double zahl, vorkomma, nachkomma;
    scanf("%lf", &zahl);
    vorkomma = (long int)zahl;
    nachkomma = fabs(zahl - vorkomma);
    


  • Die Kommazahl benötige ich für die Weiterarbeit. Das Problem ist, %lf liest die ganze kommazahl eben nicht ein, somit muss ich mir etwas bauen, dass die Zahl getrennt einliest & wieder zusammensetzt.


  • Mod

    C Beginner schrieb:

    Die Kommazahl benötige ich für die Weiterarbeit. Das Problem ist, %lf liest die ganze kommazahl eben nicht ein, somit muss ich mir etwas bauen, dass die Zahl getrennt einliest & wieder zusammensetzt.

    Typisches XY-Problem: Nein, du musst dir eben keine Frickellösung selber bauen. Du musst uns deinen Code zeigen, der nicht funktioniert. Denn scanf funktioniert richtig, das kannst du glauben. Also ist dein Code falsch, der die Zahl einlesen möchte und dabei scheitert.



  • Zum trennen in Vor- und Nachkommstellen gibt es modf


Anmelden zum Antworten