Rechner will nicht
-
Ich habe ein programm zum rechnen geschrieben.Compilieren geht einwandfrei(keine Warnungen und Fehler).Ausführen geht aber nicht.Stürzt ab.Debuggen klappt irgendwie auch nicht.Er startet nicht das programm beim Debuggen.
Fehler:Starten klappt dann kommt die ausgabe= Was wollen sie machen
1 Rechnen
2 beendenbis dahin klappt es.Man gibt eine Zahl ein drückt enter und schon kommt die tolle meldung von windows:Das Programm hat ein Fehler festgestellt.Senden nicht senden usw.
Ich find aber nicht denn Fehler.Hier der Code
#include <stdio.h> #include <stdlib.h> #include <conio.h> int anfang(); int rechner(); int main() { printf("V0.1\n\n\n"); getch(); anfang(); } int anfang() { int c; printf("Was wollen sie machen?\n1 Rechnen\n2 Ende\n"); scanf("%d", c); if(c==1) rechner(); else return 0; } int rechner() { int zahl1, zahl2, a; cheese: printf("\n1 Addition(plusrechnen)\n2 Suptration(minusrechnen)\n"); scanf("%d", a); if(a==1) { printf("\nErste Zahl= "); scanf("%d",zahl1); printf("\nZweite Zahl= "); scanf("%d",zahl2); a=0; a=zahl1+zahl2; } else if(a==2) { printf("\nErste Zahl= "); scanf("%d",zahl1); printf("\nZweite Zahl= "); scanf("%d",zahl2); a=0; a=zahl1-zahl2; } else { printf("\n?\n"); goto cheese; } printf("Ergebniss= %d",a); anfang(); }
mfg.
Stefan
-
-scanf erwartet als 2. Parameter einen Pointer Adressoperator benutzen scanf("%d",&zahl2);
-Deine goto-Anweisung lässt sich mit einer do-while-Schleife vermeiden.
-Die Variable a für 2 Zwecke zu verwenden ist unschön.
-Ergebnis mit einem 's'
-
-main und rechner funktion geben kein return Wert zurück!
-
Klappt immer noch nicht.Mit denn Returns weiß ich nicht wo die denn hinsollen?
mfg.
Stefan
-
Stefan311 schrieb:
Klappt immer noch nicht.
Was klappt immer noch nicht? Hast du masterofx32's ersten Hinweis beachtet und überall deine scanf()-Funktionen entsprechend überarbeitet?
Mit denn Returns weiß ich nicht wo die denn hinsollen?
int main() { // dein Code... return 0; } // ... int rechner() { // dein Code ... return 0; }
Wobei du die 'rechner()'-Funktion genauso gut auch vom Typ void machen kannst, da bei deiner Implementation kein Return-Wert benötigt wird...
Caipi
-
Ich benutze Devcpp.
Gut das mit dem Zeiger hinsetzen hab ich gemach.Muss ich den eigentlich declarieren oder ähnliches(den zeiger).
Returns hab ich gemacht klappt leider immer noch nicht.
-
Stefan311 schrieb:
Ich benutze Devcpp.
Gut das mit dem Zeiger hinsetzen hab ich gemach.Muss ich den eigentlich declarieren oder ähnliches(den zeiger).Ich glaube du solltest dir die Funktion scanf() nochmal ganz genau anschauen. Denn wie bereits erwähnt, scanf() erwartet die Adresse der Variablen in der du die Eingabe abspeichern möchtest.
D.h. ändere jedes scanf() von
scanf("%d", deine_variable); // das ist falsch! - scanf erwartet Zeiger
in
scanf("%d", &deine_variable); // beachte: das einzig neue ist das & (der Adressoperator)
Caipi
-
Es klappt danke.
Jetzt hab ich ein anderes Problem und zwar rechnet er 1+1=229......
Warum macht er das?
-
Ups hat sich von selbst erledigt.War nur eine falsche Variable.
-
hi,
Stefan311 schrieb:
a=0;
a=zahl1+zahl2;das is auch ein bisschen überflüssig ;).
gruß, mata
-
Hab ich schon längst weggemacht der neue Quellcode sieht so aus:
#include <stdio.h> #include <stdlib.h> #include <conio.h> int anfang(); int rechner(); int main() { printf("V0.1\n\n\n"); getch(); anfang(); return 0; } int anfang() { int c; printf("Was wollen sie machen?\n1 Rechnen\n2 Ende\n"); scanf("%d", &c); if(c==1) { rechner(); } else { return 0; } } int rechner(void) { int zahl1, zahl2, a, s; cheese: printf("\n1 Addition(plusrechnen)\n2 Suptration(minusrechnen)\n"); scanf("%d", &a); if(a==1) { printf("\nErste Zahl= "); scanf("%d",&zahl1); printf("\nZweite Zahl= "); scanf("%d",&zahl2); s=zahl1+zahl2; } else if(a==2) { printf("\nErste Zahl= "); scanf("%d", &zahl1); printf("\nZweite Zahl= "); scanf("%d", &zahl2); s=zahl1-zahl2; } else { printf("\n?\n"); goto cheese; } printf("Ergebniss= %d\n",s); anfang(); return 0; }
-
Noch eins: Subtraktion bitte mit 'b'.
-
Danke für Hinweiß.
mfg.
Stefan