Kleines C program brauche aweng hilfe!!!
-
Aufgabe ist die
ich muss mit scanf einen double wert einlesen und dan mit überprüfen ob der
wert zahlen wert ist oder nicht!
und wenn ich 0 (null) eintippe mus das programm beendet werden!ich hab da sowas:
#include <stdio.h> int main() { int h; double p = 1 ; while(p != 0) { printf("Neue Zahl:::"); h = scanf("%fl",&p); if(h==0) { printf("fehler\n"); } else { printf("okay\n"); } } return 0; }
aber wenn ich buchstaben eingebe bekomme ich endloss schleife und wenn ich 0 eintippe pasiert da gar nix!
kann mir jemand mein fehlr zeigen??
-
mach mal unter die zeile 'printf("fehler\n");' eine weitere zeile mit 'while (getchar() != '\n');'
ausserdem: im 'scanf' ist ein fehler: statt '%fl' musste '%lf' schreiben
-
So zum Beispiel:
#include <stdio.h> #include <stdlib.h> int main( ) { char buffer[ 80 ]; double data; do { printf( "Fließkommazahl eingeben, '0' für ende: " ); fgets( buffer, 80, stdin ); } while( sscanf( buffer, "%lf", &data ) != 1 ); if( data == 0.0 ) return 0; printf( "\nDie eingabe lautet: %lf", data ); }
Greetz, Swordfish
-
danke fürdie hilfe ezt funktioniert alles wie es soll !!
aber was macht while "(getchar() != '\n')"
und warum funzt es nicht so ohne" while (getchar() != '\n')";?
warum bekomme ich bei der fehleingabe endloss schleife??#include <stdio.h> int main(void) { int f = 0, r = 0; double p ; while(p != 0) { printf("Neue Zahl:::"); if(scanf("%lf",&p)==1) { printf("okay\n"); r++; } else { printf("fehler\n"); f++; } } printf("Anzahl der Fehler::%d\n",f); printf("Anzahl der Okays::%d\n",r); return 0; }
-
John Doh schrieb:
aber was macht while "(getchar() != '\n')"
und warum funzt es nicht so ohne" while (getchar() != '\n')";?
warum bekomme ich bei der fehleingabe endloss schleife??scanf holt nur die zeichen raus die es brauchen kann. wenn du mist eintippst, bekommt scanf es wieder voegesetzt usw.usw. mit dem 'getchar-trick' wird der input-buffer geleert und scanf kann wieder auf eingaben warten.
-
@ net
ok aber warum dann wen ich ohne getchar trick 0 eintipe passiert nix ?
-
John Doh schrieb:
ok aber warum dann wen ich ohne getchar trick 0 eintipe passiert nix?
0 ist ja auch erlaubt, genau so wie andere zahlen und +.-
alles andere will 'scanf ("%f",...)' nicht haben...
-
@net
aber ist das nicht so das wenn while schlei 0 sieht bendet sie die schleife???
und noch eine frage wie kann ich prozent zeichen aufs bildschirm bekommen??mit printf("%") funktioniert es nicht!!
-
ok das mit den % habe ich hin bekommen
puts("%")
-
ok das nächste problem!
wenn ich "1x" eintippe soll ermir auch ne fehler ausgeben!
macht er aber nicht!
woran liegts?
-
John Doh schrieb:
@net
aber ist das nicht so das wenn while schlei 0 sieht bendet sie die schleife???probier mal 'while(p != 0.0)' anstatt 'while(p != 0)'. fliesskommazahlen muss man mit dezimalpunkt schreiben. vielleicht hift das.
John Doh schrieb:
ok das mit den % habe ich hin bekommen
puts("%")wenn du's mal mit printf brauchst:
printf ("ein prozentzeichen: %%"); printf ("zwei prozentzeichen: %%%%");
-
John Doh schrieb:
wenn ich "1x" eintippe soll ermir auch ne fehler ausgeben!
macht er aber nicht!sollte aber. die 1 wird akzeptiert und bei dem 'x' sollt er 'fehler' ausspucken
-
ja eben der schreibt dann
zahl eingeben::1x
okay
zahl eingeben::fehler
_(blinkender eingabe kursor)ich brauche aber das er einfach nur fehler ausgibt und mit der eingabe weter vort fährt!
was muss ich da ändern?
-
John Doh schrieb:
ja eben der schreibt dann
zahl eingeben::1x
okay
zahl eingeben::fehler
_(blinkender eingabe kursor)
ich brauche aber das er einfach nur fehler ausgibt und mit der eingabe weter vort fährt!
was muss ich da ändern?das ist ja doof
dann musste wohl strings einlesen und überprüfen ob alle ziffern gültig sind. schätze mal mit 'scanf ("%lf", ...)' wird sowas schwer werden.
-
na gut frage ich meinen prof morgen !
vielen dank für deine hilfe!
cu
-
net schrieb:
dann musste wohl strings einlesen und überprüfen ob alle ziffern gültig sind.
muss er nicht.
net schrieb:
schätze mal mit 'scanf ("%lf", ...)' wird sowas schwer werden.
nö:
#include <stdio.h> #include <ctype.h> int main( ) { int f = 0, r = 0, result; double p = 1.0; char ch; while( p != 0.0 ) { printf("Neue Zahl:::"); result = scanf( "%lf", &p ); while( ( ch = getchar( ) ) != '\n' ) { if( !isspace( ch ) && result == 1 ) result = 0; } if( result == 1 ) { printf("okay\n"); r++; } else { printf("fehler\n"); f++; } } printf("Anzahl der Fehler::%d\n",f); printf("Anzahl der Okays::%d\n",r); return 0; }
Greetz, Swordfish