Problem mit der Abfolge
-
ich habe folgendes Programm:
#include <stdio.h> int main (void) { char eingabe; int zaehler1; int zaehler2; int nenner1; int nenner2; int ergebnisZaehler, ergebnisNenner; while(1) //Endlosschleife { printf("Geben Sie die auszuführende Operation an: (Multiplikation[m] | Addition[a] | Beenden[b]): "); //Angabe der Operation scanf("%c",&eingabe); if (eingabe == 'b') //Beenden des Programms { printf("Tschuess, bis naechstes Mal!\n"); break; } printf("\nBitte geben Sie den Zähler des ersten Bruchs ein: "); //Eingabe der Brüche scanf("%d",&zaehler1); printf("Bitte geben Sie den Nenner des ersten Bruchs ein: "); scanf("%d",&nenner1); printf("Bitte geben Sie den Zähler des zweiten Bruchs ein: "); scanf("%d",&zaehler2); printf("Bitte geben Sie den Nenner des zweiten Bruchs ein: "); scanf("%d",&nenner2); if (eingabe == 'm') //Multiplikation { ergebnisZaehler = zaehler1 * zaehler2; ergebnisNenner = nenner1 * nenner2; printf("%d\t\t%d\t\t%d\n-\t*\t-\t=\t--\n%d\t\t%d\t\t%d\n",zaehler1,zaehler2,ergebnisZaehler,nenner1,nenner2,ergebnisNenner); //Ausgabe der Brüche } if (eingabe == 'a') //Addieren { ergebnisZaehler = zaehler1*nenner2+zaehler2*nenner1; ergebnisNenner = nenner1*nenner2; printf("%d\t\t%d\t\t%d\n-\t+\t-\t=\t--\n%d\t\t%d\t\t%d\n",zaehler1,zaehler2,ergebnisZaehler,nenner1,nenner2,ergebnisNenner); //Ausgabe der Brüche } } return 0; }
also das programm soll einfach 2 brüche addieren bzw. multiplizieren bis man mit b das programm beendet.
das klappt soweit auch gut der erste durchlauf geht ohne Probleme aber beim zweiten gibt er schon die abfrage nach dem zähler aus obwohl er beim scan der operation ist:Geben Sie die auszuführende Operation an: (Multiplikation[m] | Addition[a] | Beenden[b]): m Bitte geben Sie den Zähler des ersten Bruchs ein: 1 Bitte geben Sie den Nenner des ersten Bruchs ein: 2 Bitte geben Sie den Zähler des zweiten Bruchs ein: 1 Bitte geben Sie den Nenner des zweiten Bruchs ein: 2 1 1 1 - * - = -- 2 2 4 Geben Sie die auszuführende Operation an: (Multiplikation[m] | Addition[a] | Beenden[b]): Bitte geben Sie den Zähler des ersten Bruchs ein: b Bitte geben Sie den Nenner des ersten Bruchs ein: Bitte geben Sie den Zähler des zweiten Bruchs ein: Bitte geben Sie den Nenner des zweiten Bruchs ein: Geben Sie die auszuführende Operation an: (Multiplikation[m] | Addition[a] | Beenden[b]): Tschuess, bis naechstes Mal!
danke für eure Hilfe
-
Das Problem liegt daran, das scanf die Entertaste nicht mit einliest, sondern im Eingabestrom stehen lässt.
Da dies aber auch ein Zeichen '\n' ist, wird sie bei deinemscanf("%c",&eingabe);
eingelesen.Such mal im Forum nach "scanf whitespace", da gibt es genug dazu.
Lösung ist ein Leerzeichen vor dem %c, Das überliest Whitespaces
scanf(" %c",&eingabe); ^ da
Ansonsten hilft eine Referenz zu scanf.
Du kannst bei http://www.cplusplus.com/reference/clibrary/cstdio/scanf/ nachlesen oder noch besser im Standard zu C.
Schau mal im Thread Linkliste für Neulinge
-
Und wie findet man so einen Fehler?
Es ist keine Schlechte Idee zu Testzwecken die Einageb nochmal auszugeben.
Etwa:printf("Ihre Wahl lautet : <%c>\n", eingabe);
Wenn du
Ihre Wahl lautet : <m>
hast, ist alles in Ordnung.
Steht da aberIhre Wahl lautet : < >
(kein Zeichen und das > in einer neuen Zeile), ist da ein Problem.
Oder noch besser: Nimm den Debugger.
-
wow vielen Dank, hast mir echt sehr geholfen