av bei einfachen Programm
-
int main(int argc, char *argv[]) { int a = 0; printf("Geben Sie eine Zahl ein\n"); scanf("%d", a); if (a < 0) { printf("Die Zahl ist kleiner als 0\n"); } if (a = 0) { printf("Die Zahl ist 0\n"); } if (a > 0) { printf("Die Zahl ist größer als 0\n"); } return 0; }
Wenn ich das Programm jetzt starte und eine Zahl eingeb, krieg ich eine AV. Warum das?!
Nutze WinXP SP2 und DevC++
-
Scanf erwartet die Adresse einer Variablen, also:
scanf("%d", &a);
//Edit:
Die zweite If-Abfrage muss lautenif(a == 0)
Ansonsten weist du nämlich a den Wert 0 zu.
Caipi
-
Malo schrieb:
int a = 0; scanf("%d", a);
Du musst scanf() die Adresse deines integers übergeben, nicht das integer selbst. Also:
scanf("%d", &a);
Ausserdem ist
if (a = 0)
falsch. Für einen logischen Vergleich muss es so heissen:
if (a == 0)
Edit: too late again
-
Oh, sorry... hab da wohl was mit der Pascal-Schreibweise verwechselt
danke!
-
Neues Problem: Jetzt wird immer mein DOS-Fenster geschlossen, wenn ich eine Zahl eingeb
-
schreib mal ein getchar(); vor den return befehl.
das kommt daher das das programm den text ausgibt und sich sofort beendet..
gruessle TDO
-
Mh, keine Änderung...
-
Das liegt daran, dass sich dein DOS-Fenster selbstständig schließt, wenn das programm ausgeführt wurde.
Starte dein Programm doch einfach mal aus der Konsole.
Caipi
-
Caipi schrieb:
Starte dein Programm doch einfach mal aus der Konsole.
Aha... und wie?
-
TDO schrieb:
schreib mal ein getchar(); vor den return befehl.
das reicht nicht, weil 'scanf' noch was im keyboard-buffer übrigt lässt. versuchs's mit 3 getchar's hintereinander. das sollte gehen
-
net schrieb:
TDO schrieb:
schreib mal ein getchar(); vor den return befehl.
das reicht nicht, weil 'scanf' noch was im keyboard-buffer übrigt lässt. versuchs's mit 3 getchar's hintereinander. das sollte gehen
Danke, hab aber grad noch ne andere Lösung gefunden:
system("PAUSE");
Trotzdem danke an alle
-
@Malo, als schöne Lösung würde ich das nicht bezeichnen
Die anderen Vorschläge sind programmiertechnisch um einiges besser.