Einfaches "Taschenrechner-Programm" überspringt Eingabe der Berechnungsart



  • Hallo, ich hätte mal eine Frage, wir arbeiten zwar mit dev-C++, sollen aber einmal eine Aufgabe mit "scanf und printf" bearbeiten.

    Die Aufgabenstellung ist ein Taschenrechner, bei dem man die erste Zahl , das Berechnungszeichen , und die zweite zahl eingibt.

    So sieht mein Programm im Moment aus

    #include<stdio.h>

    int main()
    {
    char x;
    double i,j,y,k=0;

    do
    { y=0;

    printf("Geben Sie nun die erste Zahl an\n");
    scanf("%lf",&i) ;
    printf("Geben Sie das Rechenzeichen ein\n/ ist geteilt\n ist mal\n\n");
    scanf("%c",&x);
    *
    printf("Geben Sie nun die zweite Zahl an\n");
    scanf("%lf",&j) ;

    if(x=='+')
    { k=i+j;

    }

    if(x=='-')
    { k=i-j;

    }

    if(x=='')
    { k=i
    j;

    }

    if(x=='/')
    { k=i/j;

    }
    printf("Wollen Sie noch eine Rechnung machen? Wenn ja, druecken Sie *1*\n");
    scanf("%lf",&y);
    }while(y==1);
    }

    Das Problem ist, dass das Programm den schritt der Fett markiert ist, und im Threadnamen genannt ist überspringt...

    Weiß jmd, woran das liegt, bzw. wie man das beheben kann?

    mit freundlichen Grüßen

    the_oesi



  • Codetags fehlen.Falsches Forum. Bitte einmal nach C++, danke.
    Zur Frage:
    Welchen Wert hat denn x nach der übersprungenen Eingabe ('\n')? Was passiert wen ich scanff zweimal zweimal ausführst?



  • Hmm, da unser Lehrer davon sprach, dass scanf und printf c-basis sind, und nicht c++ gab ich den thread hier rein... sorry falls das nicht stimmt

    also, bei mir steht "\n" für einen Zeilenumbruch, ich habe es gerade ohne die beiden "\n" versucht, hat nichts gebracht...

    dann, das mit "Was passiert wen ich scanff zweimal zweimal ausführst?"
    kapier ich leider nicht, die Abfrage der zweiten zahl funktioniert 😉

    Edith:

    ich habe jetzt zwischen "printf und scanf" fflush(stdin); eingefügt, jetzt funktioniert es, weiß jmd, was dieser befehl bewirkt?



  • the_oesi schrieb:

    weiß jmd, was dieser befehl bewirkt?

    [cpp]Will mich da jemand etwa zitieren?[code]Google![/code] Ja [/cpp]

    the_oesi schrieb:

    "Was passiert wen ich scanff zweimal zweimal ausführst?"
    kapier ich leider nicht, die Abfrage der zweiten zahl funktioniert 😉

    scanf("%c",&x); scanf("%c",&x);
    


  • Das Problem liegt hier an der Pufferung.

    In C gibt es keinen Befehl (wie etwa chomp bei Perl), um das letzte Zeichen zu entfernen.
    In Deinem Beispiel wird ein Zeichen eingegeben und ENTER gedrückt.

    Und dieses ENTER (ASCII-Code = 10 = \n = newline) befindet sich immer noch im Puffer der Standardeingabe und wird automatisch für das zweite Zeichen verwendet. Was kannst Du degegen tun?

    Hierzu ein paar Möglichkeiten, die allerdings auch systemabhängig sind:

    Möglichkeit 1

    Wie Du schon selber gesagt hast die Funktion fflush() zum entleeren des Tastaturpuffers.
    Was aber möglicherweise nicht auf jedem Betriebssystem (speziell nicht unter Linux) so funktioniert:

    Möglichkeit 2
    Du benutzt eine do while-Schleife und ziehst das newline-Zeichen aus dem Puffer heraus:

    do {scanf("%c",&a);} while ( getchar() != '\n' );
    

    Möglichkeit 3
    Du verwendest scanf() erst gar nicht und greifst auf eine der vielen anderen Standardeingaben-Funktionen zurück.
    Ideal wäre es beispielsweise die Funktion fgets() zum Einlesen zu verwenden und diese Eingabe mit der
    Funktion sscanf() in ein entsprechendes Format zu konvertieren.

    Gruß,

    Doug_HH



  • Dieser Thread wurde von Moderator/in CMatt aus dem Forum C# und .NET in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten