Taschenrechner Programmierung Problem
-
ich versuch mich grad in c++ einzuarbeiten wegen Uni und erstem Semester
sollen Taschenrechner programmieren und ich hab jetzt ein Problem wo ich das nimma kapiere.
Bin noch am Anfang vom Programm also nicht wundern fehlt noch einiges.Mein Code bis jetzt
#include <stdio.h> main () { char zeichen; char c; float Erg=0; float Wert1; float Wert2; printf(":"); scanf("%f", &Wert1); printf(":"); scanf("%c %c %f", &c, &zeichen, &Wert2); switch( zeichen ) { case '+': Erg = Wert1 + Wert2; printf("%f", Erg); break; case '-': //irgendwas break; case '*': //irgendwas break; case '/': //irgendwas break; } }
Das problem ist diese Zeilen Kombi
15: printf(":");
16: scanf("%c %c %f", &c, &zeichen, &Wert2);Ich hatte Zeile 16 erst so
16: scanf("%c %f", &zeichen, &Wert2);
also ohne das einlesen der Variablen "c"
Da hat das Programm dann nicht funktioniert.Also wenn ich
10
+10
machen wollte ist er immer aus dem programm gesprungen
erst nachdem ich das "c" mit eingelesen hab im scanf lief das addieren.
Hab das "c" aus der Musterlösung genommen blos hab ich absolut kein plan wieso ich das mit einlesen muss im scanf
Wäre nett wenn mir jemand ne anfängerfreundliche Erklärung geben könntevielen dank auf jeden Fall schonmal im voraus.
Mir schon fast peinlich wegen sowas kleinem hier zu fragenGrüsse
Christian
PS. eventuelle andere Fehler bitte noch nicht ansprechen will erstmal selbst probieren wenn ich mit weiteren Problemen konfrontiert werde da ich für weitere abläufe irgendwas im Moment noch falsch haben sollte.
-
#include <stdio.h> int main (void) // in ansi c wenn man keine parameter übergibt void //eintragen und rückgabetyp int, keine parameter gibts erst seit c++ { char zeichen; char c; float Erg=0; float Wert1; float Wert2; printf(":"); scanf(" %f", &Wert1); //leerzeichen, vor dem % ignoriert witespaces printf(":"); scanf("%c %c %f", &c, &zeichen, &Wert2); // ein leerzeichen ist auch ein zeichen zum einlesen switch( zeichen ) { case '+': Erg = Wert1 + Wert2; printf("%f", Erg); break; case '-': //irgendwas break; case '*': //irgendwas break; case '/': //irgendwas break; } return 0; //da du int als rückgabetyp hast solltest du auch 0 zurückgeben, alles andere sind fehlertags }
EDIT: mit den fehlern hab ich erst nach dem post gelesen, aber das ist sonst kein ansi c
-
Versuch mal ein
while(getchar()!='\n');
zwischen den beiden scanf()
-
curry-king schrieb:
Versuch mal ein
while(getchar()!='\n');
zwischen den beiden scanf()
das hat doch nichts mit dem flush zu tun
-
erstmal viiiiielen dank, hab mir die ganze Zeit den Kopf zerbrochen wieso das nicht ging und kam einfach nicht drauf. Funktioniert jetzt so wie ich das von Anfang an wollte an der Stelle.
Bin jetzt soweit
#include <stdio.h> main () { char zeichen; float Erg=0; float Wert1; float Wert2; int i=0; int x=1; printf("1Eingabe:"); scanf("%f", &Wert1); Anfang: { while (i<x) { printf("Eingabe:"); scanf(" %c %f", &zeichen, &Wert2); switch( zeichen ) { case '+': Erg = Wert1 + Wert2; printf("=%f\n", Erg); Wert1 = Erg; break; case '-': Erg = Wert1 - Wert2; printf("=%f\n", Erg); Wert1 = Erg; break; case '*': Erg = Wert1 * Wert2; printf("=%f\n", Erg); Wert1 = Erg; break; case '/': Erg = Wert1 / Wert2; printf("=%f\n", Erg); Wert1 = Erg; break; case '=': printf("Ergebniss: %f\n", Erg); Erg = 0; Wert1 = 0; Wert2 = 0; break; } } } return 0; }
Jetzt noch ne dumme Frage. gibt es ne möglichkeit die einen wieder ganz zum Anfang vom Programm bringt also zu Zeile 1 ?
return 0 beendet das programm ja. Das würde mir nämlich hier noch etwas helfen.
Dann würde ich nämlich direkt nen Sprung machen aus der letzten Case
alsoCase '=':
direkt wieder zum Anfang quasi ne "CE" taste vom Taschenrechner.
Ansonsten ist die erste Version soweit funktionsfähig blos halt sonderfälle noch nicht wie Bruch durch 0 usw das muss ich noch einfügen.
Überleg nur grad wie ich am einfachsten vom der letzten Case wieder zur Ersten Programm Zeile springen kannPS. kein reines C ?
bin ich in dem Forum hier auch Falsch
ohje
-
Schau dir mal while Schleifen an!
-
#include <stdio.h> main () { ... while(zeichen != '0'){ // wenn als zeichen 0 eingegeben wird beendet es die schleife printf("1Eingabe:"); scanf("%f", &Wert1); ... default: break; } klammer nicht vergessen return 0; }
-
Es würde auch mit zwei if Schleifen und Goto gehen (aber gleich werd ich wahrscheinlich von all den Goto Hassern gelyncht ^^)
anfang: //dein quellcode //usereingabe "Wollen sie nochwas rechnen?" if (usereingabe=='J') { goto anfang; } system ("PAUSE"); return 0; }
Wichtig sind die Doppelpunkte nach anfang ganz oben.
s.http://cck-wiki.pytalhost.com/wiki/pmwiki-2.1.27/pmwiki.php?n=CUndC.Goto
-
goto hatte ich mal kurz überlegt dann stand aber dahinter in Klammer man soll es nicht machen weil sich das "nicht gehört" daher hab ich es gelassen
Werd es mit der schleife probieren.
Und danke für die ERklärung mit dem main()
int main (void) // in ansi c wenn man keine parameter übergibt void
//eintragen und rückgabetyp int, keine parameter gibts erst seit c++Da hatte ich bei mir immer beim Debug "Vorsicht" stehn es lief zwar ohne probleme war aber halt nicht richtig muss ich noch ändern im Code.
Danke euch auf jeden Fall für die schnelle Hilfe
-
solang man auf goto verzichten kann, sollte man es machen