kostenloser Webspace werbefrei: lima-city


scanf() zahlenfehler

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    speedtouch92

    Kostenloser Webspace von speedtouch92

    speedtouch92 hat kostenlosen Webspace.

    Hallo, ich fange gerade erst mit dem Programmieren an, nun will ich eine Formel eingebenlassen mit diesen Befehlen:
    double x1, y1, t1;
    scanf("%dx + %dy = %d",&x1,&y1,&t1);
    printf("\n x1 = %d\n y1 = %d\n t1 = %d\n",x1,y1,t1);
    ich m?chte, dass der Benutzer das eingibt:
    2x + 3y = 20
    Darauf sollen folgende Variablen entstehen:
    x1 = 2
    y1 = 3
    t1 = 20
    Nun entstehen aber leider diese Variablen:
    x1 = 2
    y1 = 4370436
    t1 = 3
    Was kann ich da machen?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo,

    du musst dir immer im Klaren dar?ber sein, welche Datentypen du verarbeiten willst. Du deklarierst deine Funktionsvariablen als double, also 8Byte-Flie?kommazahlen*. scanf liest allerdings nur int-Werte (%d), also ganze 4Byte-Zahlen* ein. printf wiederum gibt mit %d nur ganze Zahlen aus.

    Dein Programm interpretiert also double-Werte (8 Byte*) so, als ob es int-Werte (4 Byte*) w?ren. Dass das nicht funktionieren kann sollte unmittelbar klar sein, deshalb auch deine seltsamen Ergebnisse. Ersetze mal das double durch ein int, dann funktioniert das Programm. Allerdings kannst du dann nur mit ganzen Zahlen rechnen. Willst du mit reellen Zahlen arbeiten, nimm als Datentyp float oder double und verwende bei printf und scanf %f (float) bzw. %lf (long float = double) anstelle von %d (decimal). Au?er f gibt's auch noch die Typen e, E, g und G f?r Gleitkommazahlen, wo da aber genau die Unterschiede liegen, kann ich dir jetzt so spontan nicht sagen. Nimm einfach das f :-)

    Ich hoffe das war einigerma?en verst?ndlich ^^

    MfG,
    thw

    * Die L?ngenangaben h?ngen von der Implementierung und der Hardwareumgebung ab. Meine beziehen sich auf den GCC 4.0.3 auf einem x86-Prozessor (32 Bit). Die Grenzwerte bekommt man bei Bedarf mit Makros aus der Datei limits.h
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!