Befehle nacheinander ausgeben



  • Hallo Community,

    ich bin ein totaler Neueinsteiger in der Programmier-Szene, weswegen meine Frage vielleicht etwas lächerlich erscheint 😉 . Mein Problem: Ich muss für die Schule ein Programm schreiben, in dem man hauptsächlich Zeichen mit "scanf" in die Konsole eingibt und die Konsole dann mit "printf" einen Text ausgibt. Soweit so gut. Wenn man das Programm dann allerdings debugt und anschließend ausführt kommen leider alle "printf's" aufeinmal, anstatt das sie nacheinander erscheinen.

    Ich habe es mir so vorgestellt, dass ein Text auftaucht, der Benutzer darauf Antwortet und dann der nächste Text erscheint und der Benutzer erneut Antwortet. Immer so weiter.

    Schon mal danke für Eure Antworten 🙂 !

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
    char verify[20];   // bis zu 20 Zeichen 
        printf("Teile uns bitte Deinen Namen mit, damit wir Dich ansprechen koennen.\n\n");
        scanf("%s",&verify); // s = Viele Zeichen
        printf("Hallo %s! Vielen Dank, dass Du deinen Namen angegeben hast.\n\n",verify);
        printf("Als erstes erklaren wir Dir die Grundlegenden Funktionen unseres Programmes. Blablabla \n\n1) "); 
    
    char antwort;
        printf("%s, denkst Du, dass Du blablabla \n\nBitte Antworte mit 'Ja' oder 'Nein'.\n\n");
        scanf("%c",&antwort);
    if ( 'J' == antwort ) {
        printf("\nDu hast mit 'Ja' geantwortet. Blablabla, %s.\n\n");
    }   else if ( 'N' == antwort ){
            printf("\nDu hast mit 'Nein' geantwortet. Blabla %s! \n\n");
            }
            else{
                printf("\n\aFEHLER: \b\n\nBitte gebe entweder 'Ja' oder 'Nein' ein. Achte dabei auf die Gross- und Kleinschreibung der Woerter.");
                }
        return 0;
    }
    


  • davidcii schrieb:

    scanf("%s",&verify); // s = Viele Zeichen
    

    Das kann zu einem Pufferüberlauf führen wenn man mehr als 19 Zeichen eingibt deswegen:

    scanf("%19s", verify); // s = Viele Zeichen
    

    (Kein &)

    davidcii schrieb:

    Wenn man das Programm dann allerdings debugt und anschließend ausführt kommen leider alle "printf's" aufeinmal, anstatt das sie nacheinander erscheinen.

    Warscheinlich liegt es daran, dass nach dem ersten scanf noch das '\n' im Puffer ist, welches dann vom zweiten scanf eingelesen wird.
    Das kannst du verhindern mit:

    int c;
    while (( c = getchar()) != '\n' && c != EOF);
    

    Wenn das nicht hilft, compiliere mal im release-Modus.



  • Ah, Danke für die Hilfe! 🙂 Damit hat's funktioniert:

    int c;
    while (( c = getchar()) != '\n' && c != EOF);
    


  • Wenn nur Whitespace (Leerzeichen, Zeilenvorschub, Wagenrücklauf, Tabulatoren) überlesen werden sollen, reicht auch ein Whitespace im Formatstring aus.

    scanf(" %c",&antwort);
           ^ Das Leerzeichen vor dem % ist wichtig!
    

    Wenn du noch mehr Zeichen überlesen willst, weil der Nutzer noch ein a oder ein eingetippt hat, ist die while-Schleife besser.


Anmelden zum Antworten