Probleme mit do-while schleifen!
-
Hallo.
Ich habe ein Problem mit do- while Schleifen. Naja ein Problem ist es nicht, ich brauche nur ein wenig Hilfe. Und zwar habe ich eine do-while Schleife gemacht und am Ende geschrieben: z.B while (c == '1'). Das Problem ist aber wenn ich 11 eingebe es sich trotzdem wiedeholt. Wisst ihr vll die Lösung? Falls ja bitte antworten!
Hier mein Code:
/* FOOKK_add.sub.mul.div. */ #include <stdio.h> #include <stdlib.h> int foo_add (int,int); int foo_subtr (int,int); int foo_mult (int,int); int foo_div (int,int); int main () { int a,b,summe,differenz,produkt,quotient; char z,c; do { system ("cls"); printf ("Addition (1)\nSubtraktion (2)\nMultiplikazion (3)\nDivision (4)\n\n"); printf ("Waehle eine Nummer: "); z = getchar (); if (z == '1') { system ("cls"); printf ("Gib die 1 Zahl ein: "); scanf ("%d",&a); printf ("Gib die 2 Zahl ein: "); scanf ("%d",&b); summe = foo_add (a,b); printf ("Summe = %d",summe); fflush (stdin); printf ("\n\nWillst du nocheinmal(j): "); c = getchar (); } else if (z == '2') { system ("cls"); printf ("Gib die 1 Zahl ein: "); scanf ("%d",&a); printf ("Gib die 2 Zahl ein: "); scanf ("%d",&b); differenz = foo_subtr (a,b); printf ("Differenz = %d",differenz); fflush (stdin); printf ("\n\nWillst du nocheinmal(j): "); c = getchar (); } else if (z == '3') { system ("cls"); printf ("Gib die 1 Zahl ein: "); scanf ("%d",&a); printf ("Gib die 2 Zahl ein: "); scanf ("%d",&b); produkt = foo_mult (a,b); printf ("Produkt = %d",produkt); fflush (stdin); printf ("\n\nWillst du nocheinmal(j): "); c = getchar (); } else if (z == '4') { system ("cls"); printf ("Gib die 1 Zahl ein: "); scanf ("%d",&a); printf ("Gib die 2 Zahl ein: "); scanf ("%d",&b); quotient = foo_div (a,b); printf ("Summe = %d",quotient); fflush (stdin); printf ("\n\nWillst du nocheinmal(j): "); c = getchar (); } else { printf ("\nEnde"); } } while (c == 'j'); printf ("\nEnde"); } int foo_add (int a,int b) { int rgw; rgw = a+b; return rgw; } int foo_subtr (int a,int b) { int rgw; rgw = a-b; return rgw; } int foo_mult (int a,int b) { int rgw; rgw = a*b; return rgw; } int foo_div (int a,int b) { int rgw; rgw = a/b; return rgw; }
edit durch SeppJ: Codetags eingefügt. Beim nächsten Mal selber dran denken!
-
Bitte benutze Code-Tags für Code! Ausnahmsweise werde ich das einmal für die korrigieren.
Wenn du einen einzelnen Buchstaben liest, dann ist es doch kein Wunder, wenn sich der Code wiederholt. Schließlich liest du die erste '1' der "11" ein und bekommst dann beim Vergleich eine '1'. Wenn deine Abbruchbedingung sein soll, dass "j\n" eingegeben wird (also j direkt gefolgt von einem Zeilenumbruch), dann musst du eben eine ganze Zeile lesen (scanf oder fgets) und dann prüfen, ob genau dieses eine Zeichen eingegeben wurde. Meiner Meinung nach, ist dies der Mühe nicht Wert.
Allgemein ist es selten eine gute Idee, formatierte Eingaben (scanf und ähnliches) mit unformatierten Eingaben (getchar und ähnliches) zu mischen (außer man weiß genau, was man tut) und das
fflush(stdin)
ist bloß eine unportable Krücke, die das auf manchen Systemen trotzdem lauffähig macht. Ich würde einfach stattdessenscanf(" %c", &c);
nutzen (beachte das Leerzeichen!). Dann brauchst du keinefflush(stdin)
mehr.