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

Page 1 of 2 12 LastLast
Results 1 to 10 of 13

Thread: Überspringen einer scanf_Anweisung in C

  1. #1
    Join Date
    26.11.2005
    Posts
    227
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Default


    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)
    Reply With Quote Reply With Quote Überspringen einer scanf_Anweisung in C  

  2. #2
    gingele's Avatar
    gingele is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    26.11.2005
    Posts
    227
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Default

    Für die bessere Lesbarkeit stell ichs als Anhang mit rein
    Attached Files Attached Files
    "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
    Join Date
    27.10.2005
    Location
    Schwäbisch Gmünd
    Posts
    5,629
    Danke
    698
    Erhielt 996 Danke für 809 Beiträge

    Default

    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

    Die Kritik an anderen hat noch niemandem die eigene Leistung erspart (Noël Coward)

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

    gingele (31.12.2008)

  5. #4
    gingele's Avatar
    gingele is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    26.11.2005
    Posts
    227
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Default

    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
    gingele's Avatar
    gingele is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    26.11.2005
    Posts
    227
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Default

    Quote Originally Posted by Rainer Hönle View Post
    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
    Join Date
    29.03.2004
    Posts
    7,273
    Danke
    165
    Erhielt 2,184 Danke für 1,565 Beiträge

    Default

    Quote Originally Posted by gingele View Post
    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
    gingele's Avatar
    gingele is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    26.11.2005
    Posts
    227
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Default

    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
    Join Date
    27.10.2005
    Location
    Schwäbisch Gmünd
    Posts
    5,629
    Danke
    698
    Erhielt 996 Danke für 809 Beiträge

    Default

    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

    Die Kritik an anderen hat noch niemandem die eigene Leistung erspart (Noël Coward)

  11. #9
    gingele's Avatar
    gingele is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    26.11.2005
    Posts
    227
    Danke
    111
    Erhielt 41 Danke für 35 Beiträge

    Default

    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
    Join Date
    27.10.2005
    Location
    Schwäbisch Gmünd
    Posts
    5,629
    Danke
    698
    Erhielt 996 Danke für 809 Beiträge

    Default


    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

    Die Kritik an anderen hat noch niemandem die eigene Leistung erspart (Noël Coward)

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

    gingele (31.12.2008)

Similar Threads

  1. TIA Script überspringen / Syntax ignorieren
    By DocSchmid in forum HMI
    Replies: 0
    Last Post: 12.09.2019, 11:18
  2. TC3 Daten in CSV-Datei schreiben / Zeilen überspringen
    By BrascoC in forum CODESYS und IEC61131
    Replies: 5
    Last Post: 04.06.2019, 11:17
  3. Mit IF Anweisung Schritt überspringen
    By Gizzl0r in forum CODESYS und IEC61131
    Replies: 8
    Last Post: 21.09.2017, 14:12
  4. Step 7 S7-GRAPH Schritte Überspringen
    By p-snk in forum Simatic
    Replies: 0
    Last Post: 14.03.2014, 13:30
  5. Programmteile überspringen
    By Benno in forum CODESYS und IEC61131
    Replies: 3
    Last Post: 14.12.2012, 18:52

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •