Kleines Rechenprogramm (+,-,*,\) funtkioniert nicht :(
-
Nabend,
bin noch ganz neu in der Programmierung und schreibe meine ersten Programme. Aber auch meine "ersten" Fehler^^
Mein Code:#include <stdio.h> int Zahl1; int Zahl2; int Zahl3; int Resultat; int Auswahl; char Auswahl2; int main() { printf("Dieses Programm kann PLUS, MINUS, MAL und VERTEILT rechnen!\n\n"); sleep(2500); printf("Fuer PLUS geben Sie Bitte 1 ein, MINUS die 2, MAL die 3, fuer VERTEILT die 4:"); scanf("%d", &Auswahl); if (Auswahl == 1) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); } printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); scanf("%s", &Auswahl2); if (Auswahl2 == 'J' | 'j') { printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); scanf("%d", &Zahl3); Resultat = (Zahl1 + Zahl2 + Zahl3); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl2 == 'N' | 'n') { Resultat = (Zahl1 + Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl == 2) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); Resultat = (Zahl1 - Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl == 3) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); scanf("%s", &Auswahl2); } if (Auswahl2 == 'J' | 'j') { printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); scanf("%d", &Zahl3); Resultat = (Zahl1 * Zahl2 * Zahl3); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl2 == 'N' | 'n') { Resultat = (Zahl1 * Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl == 4) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); Resultat = (Zahl1 / Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } system("PAUSE"); return 0; }
Ich versteh nich was falsch ist :((
Hoffe ihr könnt mir helfen..MfG eMi
-
Sage bitte, was nicht funktioniert. Compilierbar ist das Programm aber? Gehe nicht davon aus, dass hier jeder deinen Code durch den Compiler schickt.
fürs erste (Anfängerfehler) :
Du machst die J/N Abfragen falsch, besser z.B.char ok[2];
besser:
fgets( ok, 2, stdin ); if( *ok=='J' || *ok=='j' ) { ... else if ( *ok=='N' || *ok=='n' ) {
statt:
scanf("%s", &Auswahl2); if (Auswahl2 == 'J' | 'j') { ... else if (Auswahl2 == 'N' | 'n') {
-
thx, habs grad mal verändert
->es sind verschiedene Fehler, je nach dem was man am Anfang auswählt (1,2,3,4 -> Für die verschiedenen Rechenarten)
Das Programm Ist kompilierbar,
Also:
#include <stdio.h> int Zahl1; int Zahl2; int Zahl3; int Resultat; int Auswahl; char ok[2]; int main() { printf("Dieses Programm kann PLUS, MINUS, MAL und VERTEILT rechnen!\n\n"); sleep(2500); printf("Fuer PLUS geben Sie Bitte 1 ein, MINUS die 2, MAL die 3, fuer VERTEILT die 4:"); scanf("%d", &Auswahl);
Bis hier ist alle noch top
Danach wähle ich die Zahl 1 (für +)
dann kommt "GEBEN SIE BITTE IHRE ERSTE ZAHL EIN" -> Geb ich 5 ein->ENTER.
dann kommt "GEBEN SIE BITTE IHRE ZWEITE ZAHL EIN" -> Geb ich 5 ein->ENTER.dann kommt 2! Mal nacheinander!> "Moechten Sie eine weitere (letzte) Zahl eingeben? J/N:"
DAnn geb ich J ein->ENTERDanach kommt das richtige (Geben sie ihre letzte und dritte Zahl ein)->Geb ich 5 ein->ENTER
Aber Resultat ist 125! Was ist da falsch?
Hoffe jemand kann es kurz kompilieren und kurz gucken (nehme an es istn klammerfehler oder so)
MfG
(Der überarbeitete CODE):
#include <stdio.h> int Zahl1; int Zahl2; int Zahl3; int Resultat; int Auswahl; char ok[2]; int main() { printf("Dieses Programm kann PLUS, MINUS, MAL und VERTEILT rechnen!\n\n"); sleep(2500); printf("Fuer PLUS geben Sie Bitte 1 ein, MINUS die 2, MAL die 3, fuer VERTEILT die 4:"); scanf("%d", &Auswahl); if (Auswahl == 1) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); } printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); fgets( ok, 2, stdin ); if( *ok=='J' || *ok=='j' ) { printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); scanf("%d", &Zahl3); Resultat = (Zahl1 + Zahl2 + Zahl3); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if ( *ok=='N' || *ok=='n' ) { Resultat = (Zahl1 + Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl == 2) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); Resultat = (Zahl1 - Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl == 3) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); } printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); fgets( ok, 2, stdin ); if ( *ok=='J' || *ok=='j' ) { printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); scanf("%d", &Zahl3); Resultat = (Zahl1 * Zahl2 * Zahl3); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if ( *ok=='N' || *ok=='n' ) { Resultat = (Zahl1 * Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl == 4) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); Resultat = (Zahl1 / Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } system("PAUSE"); return 0; }
-
Deine Block-Klammerung ist falsch!
Ab Zeile 18:
if (Auswahl == 1) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); } // DIESE KLAMMER schliesst das if ab printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); scanf("%s", &Auswahl2);
In dem Auszug wird
printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: ");
immer ausgeführt.
Tipp zur Fehlersuche: Schreibe doch in den Ausgabetext noch die Auswahl mit rein, dann kannst du sehen wo das Programm gerade ist.
Z.B. hier das "1>" :if (Auswahl == 1) { printf("\n\n1> Bitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\n1> Bitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); } // DIESE KLAMMER schliesst das if ab printf("\n1> Moechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); scanf("%s", &Auswahl2);
-
Das Problem ist wie bei allen Eingaben mit scanf, dass das abschließende '\n' auf nächste Eingaben durchschlägt.
char tmp[80]; ...
ersetze mal ALLE Eingaben der Form
scanf("%d", &XXX);
durch
fgets(tmp,80,stdin);sscanf(tmp,"%d", &XXX);
-
sach mal wieso hörst du eingentlich nicht wenn jmd. sagt nicht immer alles in eine zeile
-
Wutz schrieb:
fgets(tmp,80,stdin);sscanf(tmp,"%d", &XXX);
zufällig ists auch noch falsch!
-
anstatt deinem code, versucht mal diesen LEICHT abgeänderten
#include <stdio.h> int Zahl1; int Zahl2; int Zahl3; int Resultat; int Auswahl; char Auswahl2; int main() { printf("Dieses Programm kann PLUS, MINUS, MAL und VERTEILT rechnen!\n\n"); sleep(2500); printf("Fuer PLUS geben Sie Bitte 1 ein, MINUS die 2, MAL die 3, fuer VERTEILT die 4:"); scanf("%d", &Auswahl); if (Auswahl == 1) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); } printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); scanf("%s", &Auswahl2); if (Auswahl2 == 'j' && 'J') { printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); scanf("%d", &Zahl3); Resultat = (Zahl1 + Zahl2 + Zahl3); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl2 == 'N' && 'n') { Resultat = (Zahl1 + Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl == 2) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); Resultat = (Zahl1 - Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl == 3) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); scanf("%s", &Auswahl2); } if (Auswahl2 == 'J' | 'j') { printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); scanf("%d", &Zahl3); Resultat = (Zahl1 * Zahl2 * Zahl3); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl2 == 'N' | 'n') { Resultat = (Zahl1 * Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } else if (Auswahl == 4) { printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); scanf("%d", &Zahl1); printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); scanf("%d", &Zahl2); Resultat = (Zahl1 / Zahl2); printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); } system("PAUSE"); return 0; }
ich schätze das wolltest
-
Nein, das wollte er nicht.
Wenn man die Einrückung anschaut, sieht man das die Klammer aus Zeile 23 in Zeile 36 gehört. Und auch bei Auswahl==3 die Klammer aus Zeile 53 in Zeile 64.
Bleiben aber immer noch ein paar Probleme:
- Was ist wenn Auswahl2 weder J noch N ist?
- Was ist bei entsprechend großen Zahlen mit dem Überlauf?
- Was passiert bei divison durch 0 (Null)?Das macht aber nichts, denn durch Fehler lernt man.
-
Vielen Dank für eure Antworten!
Werde es gleich heut abend ausprobieren (bin grad am arbeitspc)
Bleiben aber immer noch ein paar Probleme:
- Was ist wenn Auswahl2 weder J noch N ist?
- Was ist bei entsprechend großen Zahlen mit dem Überlauf?
- Was passiert bei divison durch 0 (Null)?Das kommt alles noch, sobald das Prog. so wie es jetzt ist funzt^^
-
DirkB schrieb:
Nein, das wollte er nicht.
Wenn man die Einrückung anschaut, sieht man das die Klammer aus Zeile 23 in Zeile 36 gehört. Und auch bei Auswahl==3 die Klammer aus Zeile 53 in Zeile 64.
Bleiben aber immer noch ein paar Probleme:
- Was ist wenn Auswahl2 weder J noch N ist?
- Was ist bei entsprechend großen Zahlen mit dem Überlauf?
- Was passiert bei divison durch 0 (Null)?Das macht aber nichts, denn durch Fehler lernt man.
Danke DirkB, hat nun geklappt, man man, nur wegen diesen 2 Klammern so ein riesen Prob.