Programabsturz
-
Hi
Also ich hab dies hier geschrieben und jedes mal, wenn ich was eingebe stürzt das program ab!Aber beim compilieren kommen keine Fehler!
wo ist nun das problem? Ich schätzt es hat was mit dem Zeiger und der Funktion zu tun weiß abre anicht genau was#include <stdio.h> #include <stdlib.h> #include <conio.h> int menue(int *ptr); int main(void) { int *menuvar; do { menue(menuvar); printf("%c",*menuvar); } while(*menuvar != 'b' || *menuvar != 'B'); getch(); return EXIT_SUCCESS; } int menue(int *menuvar) { printf("\t\tAuswertung Kraftstoffverbraucht\n"); printf("\t\t===============================\n\n"); printf("E - Erfassen Tankbeleg\n"); printf("A - Auswertung Kraftstoffverbrauch nach Abteilung"); printf("B - Beenden\n\n"); printf("Auswahl: "); scanf("%c",&menuvar); }
thx schon mal..
mfg
Edit (c.rackwitz): [cpp] und einrueckung
-
Es muss so aussehen:
#include <stdio.h> #include <stdlib.h> #include <conio.h> int menue(int *ptr); int main(void) { int menuvar; do{ menue(&menuvar); printf("%c",menuvar); }while(menuvar != 'b' || menuvar != 'B'); getch(); return EXIT_SUCCESS; } int menue(int *menuvar) { printf("\t\tAuswertung Kraftstoffverbraucht\n"); printf("\t\t===============================\n\n"); printf("E - Erfassen Tankbeleg\n"); printf("A - Auswertung Kraftstoffverbrauch nach Abteilung"); printf("B - Beenden\n\n"); printf("Auswahl: "); scanf("%c",menuvar); }
Ich habs es jetzt aber nicht getestet. Kann sein, dass du noch etwas ändern musst. Ausserdem wirst du mit scanf("%c",menuvar); Probleme bekommen, weil spätestens beim 2. Durchlauf noch ein \n im Eingabepuffer ist.
-
#include <stdio.h> #include <stdlib.h> #include <conio.h> char menue(); int main(void) { char menuvar; do{ menuvar=menue(); printf("%c",menuvar); }while(menuvar != 'b' || menuvar != 'B'); getch(); return EXIT_SUCCESS; } int menue(int menuvar) { printf("\t\tAuswertung Kraftstoffverbraucht\n"); printf("\t\t===============================\n\n"); printf("E - Erfassen Tankbeleg\n"); printf("A - Auswertung Kraftstoffverbrauch nach Abteilung"); printf("B - Beenden\n\n"); printf("Auswahl: "); fflush(stdin); scanf("%c",&menuvar); }
Ich habs auch nich getestet aber noch weng was verändert, denke so muesste es gehn.
-
Lyrix, bei dir kann es nicht funktionieren.
Aufruf:
menuvar=menue();
Funktion erwartet aber ein Int.
Ausserdem fällt mit auf, dassint menue(int *menuvar)
bei mir
void menue(int *menuvar)
sein muss.
Edit by c.rackwitz: Geschenke ausgeliefert.
-
Ich habe die Funktion umgeändert oben...
char menue();
Wozu braucht er denn den int Pointer in seiner Funktion? Den bracuht er imo ja gar nicht...
Ausserdem gibt er nen Charakter zurueck also muss es
Char
als Rückgabeparameter sein.
oh merk grad was ich vergessen habe. Ein
return(manuvar);
muss natürlich noch an den schluss
-
Der liebe TactX bringt euch mal ein paar Geschenke:
-
Sehr sinnvoll, solche Einzeler in CPP Tags zu fassen. Ausserdem finde ich es nicht wirklich ok, wenn mir jemand in meinem Beitrag rumpfuscht, nur um solche Tags reinzusetzen
-
Naja, ich meinte nicht die Einzeiler
-
thx für die Antworten ich hab jetzt die Version von feigling genommen
läuft jetzt auch aber wenn ich >>b<< eingeben kommt 2 mal hintereinander
printf("\t\tAuswertung Kraftstoffverbraucht\n"); printf("\t\t===============================\n\n"); printf("E - Erfassen Tankbeleg\n"); printf("A - Auswertung Kraftstoffverbrauch nach Abteilung"); printf("B - Beenden\n\n"); printf("Auswahl: ");
wenn ich aber nun nur
}while(menuvar != 'b'
schreibe läuft es ohne Probleme!! woran liegt das??
mfg
-
while(menuvar != 'b' || menuvar != 'B')
ist immer wahr. endlosschleife.
richtig:while(menuvar != 'b' && menuvar != 'B')
-
Oder du schreibst "while(toupper(menuvar)!='B');"
-
jo thx jetzt gehts!!
aber vllt ist dies Frage jetzt ziehmlich dumm aber wieso
while(menuvar != 'b' && menuvar != 'B')
das wäre dann ja UND also wenn b UND B dann bricht er ab oder seh ich jetzt hier etwas völlig flasch?!?!
mfg
-
menuvar == 'b': while (false && true) -> while (false) -> abbruch
menuvar == 'B': while (true && false) -> while (false) -> abbruch
menuvar == 'x': while (true && true) -> while (true) -> weiter
-
ahh ja jetzt versteh ichs
stand voll auf dem Schlauch
thx für die Hilfe