fflush()



  • Also ich kannd es jetzt genau so machen wie oben in dem Thread aber des wär bei der Frage unsinn. 🙂
    Also hab mir von nem Freund am wieder en Buch ausgeliehen (en kurzes 🙂 )
    und durchgeackert. Soweit alles gut aber dann kam ein Problem auf:

    printf("Zahl eingeben");
    scanf("%d", &zahl); 
    printf("Name eingeben (Beispiel)");
    gets(name, 100, stdin);
    

    Nun scheint er das '\n' (Eingabe) auf gets zu übertragen

    Im Buch steht ich soll "fflush(stdin)" benutzen. Des funktioniert aber nicht, ich hab keine Ahnung warum. Der Text ist in etwa der selbe, aber auf nem anderen Rechner.

    Wieso gehts des nicht und kennt ihr ne andere Lösung?

    PS: Ich hab mir so geholfen:

    printf("Zahl eingeben");
    scanf("%d", &zahl); 
    gets(nichts, 100, stdin);
    printf("Name eingeben (Beispiel)");
    gets(name, 100, stdin);
    

    ist aber nicht sehr praktisch.



  • Craw schrieb:

    gets(name, 100, stdin);
    

    Also dieses gets() ist mir unbekannt. Soll das nicht fgets() sein?

    Craw schrieb:

    Im Buch steht ich soll "fflush(stdin)" benutzen. Des funktioniert aber nicht, ich hab keine Ahnung warum. Der Text ist in etwa der selbe, aber auf nem anderen Rechner.

    Entweder das Buch ist explizit für MS-Compiler gemacht, oder es ist Müll.

    Erklärung: fflush(stdin) ist in C undefiniert. MS hat im Rahmen einer genialen Verbesserungsoffensive (man erkennt die Ironie) aber eben dieses als Erweiterung in "ihr" C aufgenommen. Deswegen funzt es bei MS-Compilern, bei anderen aber (höchstwahrscheinlich) nicht.

    Abhilfe z.B. so:

    void fflush_input(FILE * inputStream)
    {
     int c;
     while((c = getc(inputStream)) != EOF)
       if(c == '\n') break;
    }
    


  • hm stimmt steht fgets drin^^ aber gets und fgets gibts meines erachtens beide (im Code steht fgets, also im Buch und in meinem)
    hm ich werd deine Variante ma probieren, auch wenns net grad einfacher ist^^ 🙂

    EDIT: kann man theoretisch nciht nachträglich des *\n' aus dem String entfernen?^^



  • Craw schrieb:

    hm stimmt steht fgets drin^^ aber gets und fgets gibts meines erachtens beide (im Code steht fgets, also im Buch und in meinem)
    hm ich werd deine Variante ma probieren, auch wenns net grad einfacher ist^^ 🙂

    Es gibt schon gets(), aber das hat nur ein Argument, nicht 3. Außerdem sollst du dieses gets() _nie_ nehmen. Begründung siehe man-page.

    Craw schrieb:

    EDIT: kann man theoretisch nciht nachträglich des *\n' aus dem String entfernen?^^

    Aus einem String? Klar geht das.

    char *foo;
    if(foo = strchr(string,'\n')) *foo = '\n';
    


  • ok danke dir 🙂 aber wat man-page? naja egal 🙂




Anmelden zum Antworten