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.



  • @Swordfish

    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


Anmelden zum Antworten