Anfängerproblem mit scanf
-
Hallo Forum!
Ich bin C-Programmieranfänger (beschäftige mich erst ein paar Tage damit) und habe mir ein Tutorial besorgt.
Gerade bin ich bei dem Befehl scanf angekommen und der will bei mir irgendwie nicht das tun, was er soll.
Das Folgende Programm soll 2 Zahlen abfragen und dann zu einem Ergebnis addieren:#include <stdio.h>
main ()
{
int x, y ;
printf (" Addition von x und y : \n") ;
printf (" x = ") ;
scanf ("%d" , &x) ;
printf (" y = ") ;
scanf ("%d" , &y) ;
printf (" %d + %d = %d \n" , x , y , x+y) ;
getchar () ;
return 0 ;
}Und nun bin ich seit längerem auf Fehlersuche, weil das Programm zwar die Werte abfragt, sich dann aber schließt, ohne z.b. 5 + 3 = 8 zu schreiben.
Ich hoffe ihr könnt mir weiterhelfen.
Danke im Vorausgruß,
theAtheist
-
Das liegt an deinem getchar().
Der wartet dann nicht, bis eine Taste gedrückt wird, sondern beendet es, wenn keine kommt.
Mach einfach eine erneute scanf-abfrage. Dann klappt das eigentlich auch.
-
Sorry ich muss nochmal einhaken.
Wenn du willst, dass das Programm mit Enter beendet wird, solltest du es so machen:
#include <stdio.h> main () { int x, y ; char c; printf (" Addition von x und y : \n") ; printf (" x = ") ; scanf ("%d" , &x) ; printf (" y = ") ; scanf ("%d" , &y) ; getchar(); //ist notwendig, weil die letzte Taste ja wegen dem scanf davor Enter ist printf (" %d + %d = %d\n" , x , y , x+y) ; while(c=getchar()!='\n'); //endlossschleife, bis Enter gedrückt wird return 0 ; }
-
Dankesehr!!!
Jetzt funktioniert es!
Aber wozu brauche ich die Endlosschleife?? Wenn ich einfach am Schluss getchar () schreibe (wie in meiner ursprünglichen version) tut es auch...
Ist es besser mit Schleife?gruß
tAEdit:
Was macht getchar () eigentlich genau???
-
theAtheist schrieb:
Endlosschleife
ist es keine. hat doch ne abbruchbedingung.
getchar() holt sich n zeichen aus dem eingabepuffer.
nimm lieber den code:
int c; // es muss ein int sein, kein char
...
while ((c = getchar()) != EOF && c != '\n');max: verbreite bitte kein halbwissen. getchar() wartet bis es was lesen kann. es ueberspringt dies nicht einfach.
-
Max3000 schrieb:
Sorry ich muss nochmal einhaken.
Wenn du willst, dass das Programm mit Enter beendet wird, solltest du es so machen:
#include <stdio.h> main () { int x, y ; char c; printf (" Addition von x und y : \n") ; printf (" x = ") ; scanf ("%d" , &x) ; printf (" y = ") ; scanf ("%d" , &y) ; getchar(); //ist notwendig, weil die letzte Taste ja wegen dem scanf davor Enter ist printf (" %d + %d = %d\n" , x , y , x+y) ; while(c=getchar()!='\n'); //endlossschleife, bis Enter gedrückt wird return 0 ; }
deine Lösung ist zwar korrekt, aber meines erachtens her etwas "überladen" :p .
Besser wäre meines erachtens her das hier:#include <stdio.h> int main () { int x, y ; printf (" Addition von x und y : \n") ; printf (" x = ") ; scanf ("%d" , &x) ; fflush(stdin); printf (" y = ") ; scanf ("%d" , &y) ; printf (" %d + %d = %d \n" , x , y , x+y) ; fflush(stdin); getchar(); return 0 ; }
-
DSD-Steve schrieb:
Mit Hilfe von fflush(stdin) leerst du den Eingabepuffer und schon funktioniert getchar() wieder so wie du es wolltest(auch wenn es hier eigentlich missbraucht wird
).
Dumm nur, dass fflush() nicht für Eingabepuffer definiert ist