C - Warum funktioniert das nicht?
-
Hallo,
Hab vor kurzem mit C angefangen und probier mich gerade mit "if" aus. Hab eine alte übung aus einem Buch genommen und mit dem if erweitert. Es soll von 3 eingebenen Zahlen die entweder größere oder kleinere Zahl ausspucken.
Hier erstmal die Source:
#include <stdio.h> main() { int wert; float x,y,z; printf("\nDer kleiner oder gross ausspucker\n"); printf("\n1. Zahl: "); scanf("%f",&x); printf("2. Zahl: "); scanf("%f",&y); printf("3. Zahl: "); scanf("%f",&z); printf("\n1. Die groessere Zahl herausfinden. "); printf("\n2. Die kleinere Zahl herausfinden. "); printf("\n\nIhre Wahl: "); scanf("i%",&wert); if (wert == 1){ printf("\nDie groessere Zahl lautet: %.0f ",(x>y) ? ((z>x) ? z : x) : ((z>y) ? z : y) ); } if (wert == 2){ printf("\nDie kleinere Zahl lautet: %.0f ",(x<y) ? ((z<x) ? z : x) : ((z<y) ? z : y) ); } }
Klappt soweit ganz gut, die ersten 3 Zahlen kann ich eingeben aber bei "Ihre Wahl" kann ich nichts eingeben, es wird übersprungen auf..
if (wert == 2)
..und gibt die kleinere Zahl aus. Wo ist der Fehler? Will des jetz wissen!
-
Du hast einen vertippsler in
juppy schrieb:
scanf( "i%", &wert );
Das muss
scanf( "%i", &wert );
heißen!
Ein Löschen des Eingabepuffers sollte auch noch von Vorteil sein:
#include <stdio.h> int main( ) { int wert; float x,y,z; printf( "\nDer kleiner oder gross ausspucker\n" ); printf( "\n1. Zahl: " ); scanf( "%f", &x ); setvbuf(stdin,NULL,_IONBF,0); setvbuf(stdin,NULL,_IOFBF,BUFSIZ); printf( "2. Zahl: " ); scanf( "%f", &y ); setvbuf(stdin,NULL,_IONBF,0); setvbuf(stdin,NULL,_IOFBF,BUFSIZ); printf( "3. Zahl: " ); scanf( "%f", &z ); setvbuf(stdin,NULL,_IONBF,0); setvbuf(stdin,NULL,_IOFBF,BUFSIZ); printf( "\n1. Die groessere Zahl herausfinden. " ); printf( "\n2. Die kleinere Zahl herausfinden. " ); printf( "\n\nIhre Wahl: " ); scanf( "%i", &wert ); setvbuf(stdin,NULL,_IONBF,0); setvbuf(stdin,NULL,_IOFBF,BUFSIZ); if( wert == 1 ) { printf( "\nDie groessere Zahl lautet: %.0f ", ( x > y ) ? ( ( z > x ) ? z : x ) : ( ( z > y ) ? z : y ) ); } if( wert == 2 ) { printf( "\nDie kleinere Zahl lautet: %.0f ", ( x < y ) ? ( ( z < x ) ? z : x ) : ( ( z < y ) ? z : y ) ); } }
Greetz, Swordfish
-
Ah lol
danke, und ich hab mir die ganze Zeit einen abgesucht und dann doch den lausigsten Fehler übersehn! Jetz funktionierts.
-
kann man zum löschen des puffers net auch ...
fflush(stdin);
nehmen , für ihn am anfang evtl leichter ... ??!!
-
nehmen , für ihn am anfang evtl leichter ... ??!!
aber trotzdem keine tolle loesung, also warum nicht von anfang an richtig machen?
-
NEIN.
fflush schreibt den Puffer weg, für einen Eingabestrom ist das plattformunabhängig nicht definiert.
-
fflush schreibt den Puffer weg, für einen Eingabestrom ist das plattformunabhängig nicht definiert.
wieder was gelernt ...
also warum nicht von anfang an richtig machen?
stimmt ....
-
Seid ihr euch sicher, dass die Lösung mit setvbuf() portabel ist?
-
ICH habe nur auf den fflush Vorschlag geantwortet
-
Du teilst also meine Bedenken?
-
TactX schrieb:
Seid ihr euch sicher, dass die Lösung mit setvbuf() portabel ist?
Keine Ahnung, aber jetzt würd's mich interessieren.
Greetz, Swordfish