Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Überspringen einer scanf_Anweisung in C

  1. #1
    Registriert seit
    26.11.2005
    Beiträge
    225
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich versuche gerade in den Ferien meine erlernten C-Kenntnisse zu festigen und Versuche einige Übungsaufgaben. Doch bei dieser Aufgabe stoße ich auf ein Problem wo ich nicht weiter weiß.
    Ich soll einen Taschenrecher mit den Grundrechenarten programmieren, ist auch eigentlich nicht schwer, kappt soweit beim ersten Rechendurchgang auch, doch der Rechner soll erst beendet werden wenn als Operator q geschreiben wird, somit läuftder Rechner bei nicht eingabe q, beim ersten Durchgang, wieder von vorne los, doch diesesmal kann ich keinen Operator reinschreiben, da die scanf-Anweisung
    Code:
    "Bitte Eingabe Operator"
    übersprungen wird und gleich die Eingabe kommt
    Code:
    "Bitte Eingabe Operand1"
    Hier mal das Programm:
    Code:
    #include <stdio.h>
    float calculate(char optr, float opr1, float opr2)
    {
    float erg;
    switch(optr)
    {
    case('+'):
    erg=opr1+opr2;
    break;
    case('-'):
    erg=opr1-opr2;
    break;
    case('*'):
    erg=opr1*opr2;
    break;
    case('/'):
    erg=opr1/opr2;
    break;
    }
    return erg;
    }
    int main(void)
    {
    float opr1;
    float opr2;
    char optr='0';
    float erg; 
    while(optr!='q')
    {
    printf("\nEingabe: Operator <return> Operand1 <return> Operand2 <return>");
    printf("\nBitte Eingabe Operator (+, -, *, /, q): ");
    scanf ("%c", &optr);
    if(optr!='q')
    {
    printf("\nBitte Eingabe Operand1: ");
    scanf ("%f", &opr1);
    printf("\nBitte Eingabe Operand2: ");
    scanf ("%f", &opr2); 
    printf("\nErgebnis: %f %c %f = %f\n",opr1, optr, opr2, calculate(optr,opr1,opr2));
    }
    else
    {
    break;
    }
    }
    return 0;
    }
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
    (Albert Einstein - 14.03.1879 - 18.04.1955)
    Zitieren Zitieren Überspringen einer scanf_Anweisung in C  

  2. #2
    Avatar von gingele
    gingele ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.11.2005
    Beiträge
    225
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Standard

    Für die bessere Lesbarkeit stell ichs als Anhang mit rein
    Angehängte Dateien Angehängte Dateien
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
    (Albert Einstein - 14.03.1879 - 18.04.1955)

  3. #3
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Eventuell ist das CR noch im Tatstaurpuffer und wird mittels scanf ausgelesen. Welchen Wert hat denn optr? Wird gar keine der Anfangs-Ausgaben erzeugt?
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  4. Folgender Benutzer sagt Danke zu Rainer Hönle für den nützlichen Beitrag:

    gingele (31.12.2008)

  5. #4
    Avatar von gingele
    gingele ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.11.2005
    Beiträge
    225
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Standard

    Doch es kommen beim zweiten Durchlauf dann die Ausgaben:


    Eingabe: Operator <return> Operand1 <return> Operand2 <return>
    Bitte Eingabe Operator (+, - *, /):
    Bitte Eingabe Operand1:


    quasi kann ich dann Operand1 eingeben aber keinen Operator, und wenn ich beim ersten Durchlauf z.b ein + reingeschrieben habe und halt dann einfach beim zweiten Durchgang die Operanden eingebe ist das + nicht mehr da.
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
    (Albert Einstein - 14.03.1879 - 18.04.1955)

  6. #5
    Avatar von gingele
    gingele ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.11.2005
    Beiträge
    225
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Standard

    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Eventuell ist das CR noch im Tatstaurpuffer und wird mittels scanf ausgelesen.
    Was bedeutet das ???
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
    (Albert Einstein - 14.03.1879 - 18.04.1955)

  7. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von gingele Beitrag anzeigen
    Was bedeutet das ???
    Guck mal hier, da ist das Problem mit scanf beschrieben:

    http://openbook.galileocomputing.de/...0025E21F04018C

  8. Folgende 2 Benutzer sagen Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    gingele (31.12.2008),Rainer Hönle (31.12.2008)

  9. #7
    Avatar von gingele
    gingele ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.11.2005
    Beiträge
    225
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Standard

    Also das Problem habe ich erkannt, nach ner Lösung such ich jetzt mal, ich Versuch das Programm umzumodeln. Der Befehl fflush geht leider nicht da ich linux verwende, aber da ich jetzt weis wo das problem liegt weiß ich besser wie ich programmieren muß.

    Danke nochmals und einen guten Rutsch.

    gruß Frank
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
    (Albert Einstein - 14.03.1879 - 18.04.1955)

  10. #8
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Prüf doch einmal den gelesenen Wert.
    Code:
    printf("\nBitte Eingabe Operator (+, -, *, /, q): ");
    while(optr!='q' && optr!='+' && optr!='-" && optr!='*' && optr!='/')
    {
      scanf ("%c", &optr);
    }
    if(optr!='q') 
    ....
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  11. #9
    Avatar von gingele
    gingele ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.11.2005
    Beiträge
    225
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Standard

    So funktioniert es leider auch nicht, die Funktion ist wie vorher.
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
    (Albert Einstein - 14.03.1879 - 18.04.1955)

  12. #10
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ok, kleine Änderung:
    Code:
    optr=0;
    printf("\nBitte Eingabe Operator (+, -, *, /, q): ");
    while(optr!='q' && optr!='+' && optr!='-" && optr!='*' && optr!='/')
    {
      scanf ("%c", &optr);
    }
    if(optr!='q') 
    ....
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  13. Folgender Benutzer sagt Danke zu Rainer Hönle für den nützlichen Beitrag:

    gingele (31.12.2008)

Ähnliche Themen

  1. Antworten: 20
    Letzter Beitrag: 20.01.2011, 21:55
  2. Kopplung einer 317 mit einer IM151 über Profinet
    Von GerhardPtl im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 08.07.2010, 13:52
  3. Antworten: 2
    Letzter Beitrag: 15.04.2008, 16:45
  4. Antworten: 7
    Letzter Beitrag: 19.03.2008, 21:11
  5. Antworten: 1
    Letzter Beitrag: 10.11.2006, 16:29

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •