2 switch/case anweisungen miteinander verknüpfen!
-
Hallo,
Das folgende Programm funktioniert ordnungsgemäß! Wieso funktioniert dann das programm aus dem zweiten code nicht?
#include <stdio.h> #include <stdlib.h> #include <string.h> main(void){ char eingabe1, eingabe2; printf("geben sie ja oder nein Fall 1 ein (j/n) :"); scanf("%c", &eingabe1); fflush(stdin); switch(eingabe1){ case'j': printf("j aus eingabe 1 wird ausgefuehrt\n"); break; case 'n': printf("n aus eingabe 1 wird ausgefuehrt\n"); break; } printf("geben sie ja oder nein Fall 2 ein (j/n):"); scanf("%c", &eingabe2); fflush(stdin); switch(eingabe2){ case'j': printf("j aus eingabe 2 wirs ausgefuehrt\n"); break; case'n': printf("n aus eingabe 2 wird ausgefuehrt\n"); break; } return 0; }
-
Jedesmal, wenn ich das rechenprogramm ausführe soll dannach gerfragt werden, ob das üben der bitoperatoren ausgeführt werden soll. Er gibt die printf("..") zeile #136 zu dem nächsten switchcase fall aus, aber er fragt nach keiner eingabe, also überspringt irgendwie das scanf!!
#include <stdio.h> #include <stdlib.h> #include <string.h> */Funktionen müssen für mein Problem nicht betrachtet werden! Übersichtliche Einrückung ist in der main(void){...} vorhanden./* double addition (double x, double y){ double ergebnis; ergebnis = x+y; return ergebnis; } double subtraktion (double x, double y){ double ergebnis; ergebnis = x-y; return ergebnis; } double multiplikation (double x, double y){ double ergebnis; ergebnis = x * y; return ergebnis; } double division (double x, double y){ double ergebnis; ergebnis = x / y; return ergebnis; } unsigned int bitoperator1(int x, int y){ unsigned int ergebnis; ergebnis = x & y; return ergebnis; } unsigned int bitoperator2(int x, int y){ unsigned int ergebnis; ergebnis = x | y; return ergebnis; } unsigned int bitoperator3(int x, int y){ unsigned int ergebnis; ergebnis = x ^ y; return ergebnis; } int bitoperator4(int x, int y){ int ergebnis; ergebnis = ~x; return ergebnis; } unsigned int bitoperator5(int x, int y){ unsigned int ergebnis; ergebnis = x >> y; return ergebnis; } unsigned int bitoperator6(int x, int y){ unsigned int ergebnis; ergebnis = x << y; return ergebnis; } main(void){ double x,y, ergebnis_comp, ergebnis_user; int richtiggerechnet=0,xi,yi; char eingabe, eingabe2; printf("Wollen sie rechnen?(j/n)"); scanf("%c", &eingabe); fflush(stdin); switch(eingabe){ case 'j': printf("\tRechenprogramm\n\t==============\n\tBitte geben sie 2 Zahlen getrennt durch ein Komma ein:"); scanf("%lf,%lf", &x, &y); printf("\t%.2lf + %.2lf ist:", x,y); ergebnis_comp = addition (x,y); scanf("%lf", &ergebnis_user); if(ergebnis_comp != ergebnis_user) printf("\tFalsch! Richtig waere: %.2lf\n", ergebnis_comp); if(ergebnis_comp == ergebnis_user){ printf("\tRichtig!!\n"); richtiggerechnet++; } printf("\t%.2lf - %.2lf ist:", x,y); ergebnis_comp = subtraktion (x,y); scanf("%lf", &ergebnis_user); if(ergebnis_comp != ergebnis_user) printf("\tFalsch! Richtig waere: %.2lf\n", ergebnis_comp); if(ergebnis_comp == ergebnis_user){ printf("\tRichtig!!\n"); richtiggerechnet++; } printf("\t%.2lf * %.2lf ist:", x,y); ergebnis_comp = multiplikation (x,y); scanf("%lf", &ergebnis_user); if(ergebnis_comp != ergebnis_user) printf("\tFalsch! Richtig waere: %.2lf\n", ergebnis_comp); if(ergebnis_comp == ergebnis_user){ printf("\tRichtig!!\n"); richtiggerechnet++; } printf("\t%.2lf / %.2lf ist:", x,y); ergebnis_comp = division (x,y); if(y == 0) printf("\n\tDivison mit 0 ist nicht erlaubt!\n"); else{ scanf("%lf", &ergebnis_user); if(ergebnis_comp != ergebnis_user) printf("\tFalsch! Richtig waere: %.2lf\n", ergebnis_comp); if(ergebnis_comp == ergebnis_user){ printf("\tRichtig!!\n"); richtiggerechnet++; } printf("\t%i Aufgaben richtig gerechnet!\n\n", richtiggerechnet); } break; case 'n': break; } printf("Wollen sie die Wirkungsweise der Bitoperatoren ueben? (j/n)"); scanf("%c", &eingabe2); fflush(stdin); switch (eingabe2){ case 'j': printf("wir ueben"); break; case 'n': printf("wir ueben nicht"); break; } return 0; }
hilfe, sitze schon den ganzen tag an diesem problem!
danke
-
Hat dir hier nicht schon mal jemand gesagt, dass du an deinem Einrückungsstil arbeiten sollst?
Und, warum hast du das nicht getan?
Bist du masochistisch veranlagt?
Glaubst du, dass die Antworter hier es sind?
Welchen Compiler benutzt du? ( fflush(stdin) ist UB und Anfängerschrott )
-
hallo, die einrückungen wurden leider beim kopieren nicht mit übernommen. bin gerade dabei den code zu editieren.
Das fflush(stdin) wird so von meinem professor nach jedem scanf("..") gefordert!
-
Wenn du garade beim editieren bist dann nimm doch gleich die cpp tags.
-
ich hoffe das Programm ist nun ein wenig übersichtlicher. Habe die cpp dingsbumsdinger verwendet
..
-
Setz das mal vor das scanf()
while (getchar() != '\n');
-
Und dazu vielleicht noch folgendes:
-
hey, also liegt es daran, dass dieses fflush() nicht korrekt arbeitet? Das Programm funktioniert nach dieser Änderung. Aber was passiert denn da eigentlich genau? Und wieso gibt mein Prof dann nicht deinen Programmpart an um den Tastaturspeicher zu löschen?
-
Zeig deinem Prof. mal das Zitat aus dem Link.
Oder wird dein Prof. von Microsoft gesponsert? Die betrachten das als Erweiterung des C-Standard. Da der C-Standard da schreibt, nicht definiert, muss das auf keinem anderen Compiler funktionieren, wenn der standard-konform ist.
MfG f.-th.
-
das mit dem fflush() ist halt so ne Sache...
Mancher Microsoft-Compiler mag mit einem fflush auf stdin etwas anzufangen wissen, die Mehrzahl aller anderen Compiler jedoch nicht.
Wenn Du nach dem fflush(stdin) Aufruf mal die Fehlerausgabe bemühst, wirst Du mit hoher Wahrscheinlichkeit etwas wie "Illegal seek" lesen.
Mein Chef ist sozusagen ein alter Hase, was die Programmierung angeht. Als Fremdsprache könnte er im Lebenslauf Assembler angeben. Trotzdem beharrt er darauf, dass unser gcc unter Linux genau weiß, was er mit einem fflush(stdin) erreichen will (nachgewiesenermaßen weiß der gcc das natürlich nicht, interessiert die Gattung Chef jedoch grundsätzlich ja nicht).
Ob Du nun Deinen Professor etwas schlauer machen möchtest oder einfach für Dich selbst zur Kenntnis nimmst, dass man damit keinen Eingabepuffer leert, bleibt Dir selbst überlassen.
-
ok verstanden, danke
Ich behalt diese info lieber für mich. Mein prof und ich sind nicht gerade beste freunde
... ihn belehren wäre glaub ich keine gute idee ... ich fußvolk, er könig ... den eindruck habe ich zumindestens wenn man fragen stellt ..