2 Fehler im Programm :(
-
Ich weiß nicht, was ich falsch gemacht habe, aber das erste Problem ist, dass man bei der ersten Eingabe zwei Zahlen eingeben muss und dass das Programm sofort nach der der Ausgabe sich wieder schließt.
#include<stdio.h> int a,b; int main() { printf("Gib die erste Zahl ein:"); scanf("%d\n",&a); printf("Bitte gib die zweite Zahl ein:"); scanf("%d\n",&b); if(a>=b) { printf("%d ist größer als %d!",a,b); } else { printf("%d ist kleiner als %d!",b,a); } getchar(); return 0; }
Danke im Voraus
-
das problem ist das whitespace \n, in deinem formatstring.
ein whitespace veranlasst scanf alle whitespaces bis zum nächsten nicht-whitespace
zu ignorieren.
darum wartet der erste scanf auf die eingabe eines
nicht-whitespace, wartet also auf die eingabe einer zweiten zahl.
dann erst 'merkt' scanf, das die erste zahl eingelesen wurde
und das es nix mehr einzulesen gibt und spuckt die zweite zahl zurück
in den puffer. diese zahl wird dann automatisch vom zweiten scanf übernommen,
weil ja noch was im puffer ist und es also noch was einzulesen gibt. o0du solltest du den rückgabewert von scanf prüfen. grund: gibt jemand einen buchstaben
anstatt einer zahl ein, gibts probleme - die zeichen bleiben im puffer drin.
wenn dann eine zweite zahl per scanf eingelesen werden soll,
werden die unerwünschten buchstaben erneut eingelesen kurzum es kommt bei berechnungen
grütze raus und in schleifen führt das zu endlosschleifen ...
nach einem erfolgreichen scanf aufruf bleibt nur noch das \n
im eingabepuffer. leere den puffer nach einem scanf aufruf.
weil eine eingabe wegen der fehlerprüfung und der pufferleerung
etwas aufwand mit sich zieht, empfiehlt es sich bei mehrmaligen
eingaben diese in eine funktion auszulagern.damit sich die konsole nicht sofort schließt, kann man ein getchar()
einbauen, was du auch getan hast. wenn aber noch zeichen im puffer sind,
dann wird getchar() quasi automatisch aufgerufen. d.h. der puffer
muss leer sein, damit das fenster nicht zu geht.in etwa so:
#include <stdio.h> // leert den eingabepuffer void clear_buffer() { setvbuf( stdin, NULL, _IONBF, 0 ); setvbuf( stdin, NULL, _IOFBF, BUFSIZ ); } // alternative zu clear_buffer. // nicht so schön: führt zur endlosschleife, wenn kein scanf aufgerufen wurde, weil // beim programmstart kein \n im puffer ist. // schön: die zeichen, die aus dem puffer geholt werden lassen sich zählen und z.b. // für fehlerprüfungen benutzen. int clear_buffer2() { int c, i = 0; while ( (c = getchar()) != EOF && c != '\n') {i++;} return i; // anzahl der geleerten zeichen, außer dem \n. } void wait_for_enter() { clear_buffer() getchar(); } int integer_input ( char* msg ) { int number; int ret; if (msg) printf(msg); while ( 1 != ( ret = scanf ( "%d", &number )) || 0 != clear_buffer2() ) { if ( ret != 1 ) clear_buffer2(); puts("Unerlaubtes Zeichen in der Eingabe!"); if (msg) printf(msg); } return number; } int main() { int a,b; a = integer_input("Gib die erste Zahl ein: "); b = integer_input("Bitte gib die zweite Zahl ein: "); if ( a > b ) printf("%d ist größer %d!", a, b); else if ( a < b ) printf("%d ist kleiner als %d!", a, b); else printf("%d ist gleich %d!", b, a ); wait_for_enter(); return 0; }
-
#include <windows.h> int main(void) { system("pause"); return 0; }
pause schließt die konsole auch nicht