Eingegebenen String Vergleichen



  • wo soll ich da ne fehlermeldung bekommen mit fflush(stdin)? bei mir funktionier das einwandfrei...

    wir lernen das in der schule so das wir fflush(stdin) verwenden sollen und bis jetzt hatte ich noch nie probleme damit.



  • Es gibt noch andere Hersteller von Compilern als Microsoft. Und die haben sogar den aktuellen Standard größtenteils implementiert. 🙂



  • oder anders ausgedrückt:

    Ich finde es sinnvoll, eine Programmiersprache so zu lernen, wie sie gedacht ist. Wenn Euer freundlicher Microsoft-Compiler fflush(stdin) erkennt und dann irgendwas (mehr oder weniger sinnvolles) mit dem Eingabestream macht, ist das jetzt am Anfang sicherlich bequem und praktisch. Da muss man sich dann schonmal nicht mit exakter Formatierung erwarteter Eingaben (Scheunen haben zwar Scheunentore - die kann man aber zumachen!) und gewissenhafter Konzeptierung von Programmen (Wenn der Benutzer etwas eingibt, das man ihn hat eingeben lassen, möchte man das im Normalfall nicht einfach in den Müll werfen, sondern irgendwas damit anfangen. Deshalb ist für die allermeisten Fälle ein fflush(stdin) die Abkürzung um den sinnvollen Weg, Stolpersteine zu kennen, zu erkennen und entsprechend zu programmieren.



  • Ich möchte noch anregen die uneffektiven if else if Ketten auszutauschen:

    switch(i) {
    case 0:
           printf("\n1. Farbe\t"); break;
    case 1:
           printf("\n2. Farbe\t"); break; 
    case 2:
           printf("\n3. Farbe\t");  break;
    case 3: 
           printf("\n4. Farbe\t");  break;  
    case 4: 
           printf("\n5. Farbe\t");  break;
    default:
           printf("\nFehlerhafte Eingabe!"); break; 
    }
    

    Oder in diesem Fall einfacher

    switch(i) {
    case 0:
    case 1:
    case 2:
    case 3: 
    case 4: 
           printf("%d. Farbe\n", i+1);  break;
    default:
           printf("Fehlerhafte Eingabe!\n"); break; 
    }
    

    Bem: Das Zeilenendezeichen sollte auch am Ende stehen.
    Viele UNIX-Systeme geben die Zeile erst aus, wenn sie komplett (oder der IO-Buffer voll) ist.
    Im Fehlerfall z.B. sieht man so die letzte Meldung dann auch bevor der Prozess
    gekillt wird 🙂

    PS: Laut Kernighan Ritchie ist fflush nur für stdout definiert. Das hält einige Programmierer aber nicht davon ab es auch für stdin zu verwenden :xmas1:



  • @merano: Mein Vorgesetzter schwört seit gut 20 Jahren auf fflush (stdin)... compiler gcc unter linux, vorher sco bzw unix.
    Ich wurde sogar gerügt, weil ich nach meiner Eingaberoutine kein fflush aufrufe 😉
    strerror folgt meinem Bauchgefühl mit einem "illegal seek" 😉



  • @würmchen: ich möchte hier verbesserungsvorschläge bekommen und keine dummen kommentare, es mag sein das fflush() nicht die beste methode ist aber dann zeig mir doch einfach wie ich das besser machen kann anstatt nur sinnlose kommentare von dir zu geben.
    Außerdem muss du mich hier nicht gleich aufziehen, wir haben das eben so bis jetzt in der schule gehabt deswegen mach ich das auch solange so bis mir jemand eine bessere methode zeigt.

    @merano: ich dank dir für den hinweis ich werd das bei mir verbessern 🙂



  • ami3z schrieb:

    ... bis mir jemand eine bessere methode zeigt.

    Die stand schon in der ersten Antwort. Man muss dann auch mal den Links folgen und das durchlesen.
    Noch mal der direkte Link zu der Antwort: http://www.c-plusplus.net/forum/p1146014#1146014



  • ami3z schrieb:

    wir lernen das in der schule so das wir fflush(stdin) verwenden sollen und bis jetzt hatte ich noch nie probleme damit.

    Tja, dein Lehrer hat keine Ahnung und lehrt euch Schülern diese Ahnungslosigkeit.
    Hast Pech gehabt.
    Wird dir in deinem späteren Leben noch häufiger passieren.
    Gehe davon aus, dass du hier der 1001. Frager bist, der sich zum Thema fflush(stdin) äußert und auch schon mind. der 1001 Naivfrager bist, der mit "bei mir läufts" hier aufschlägt.
    Die Fragen sind auch schon 1000x beantworten worden, wer lesen kann (z.B. FAQ), ist klar im Vorteil.



  • würmchen schrieb:

    Deshalb ist für die allermeisten Fälle ein fflush(stdin) die Abkürzung um den sinnvollen Weg, Stolpersteine zu kennen, zu erkennen und entsprechend zu programmieren.

    Bitte mal auf Deutsch übersetzen.



  • nein, ich denk der lehrer bringt uns das bewusst so bei, ihr müsst bedenken das ich noch ein blutiger anfänger bin und einem anfänger kann man da nicht gleich iwelche komplizierten sachen an den kopf werfen. Ich kann man natürlich auch täuschen und mein lehrer hat wirklich keine ahnung das lass ich mal offen dahingestellt.


Anmelden zum Antworten