Bei falscher Eingabe, Frage erneut stellen. Wie?



  • Hallo Freunde,

    Ich habe vier Printf Abfragen. Gelesen werden zwei Int und zwei float Zahlen (alle positiv und größer als 0).
    Den Algorithmus für die Bearbeitung der Aufgabe habe ich schon. Bin mit dem Programm fertig. Jetzt gehts
    um Benutzerfreundlichkeit. Ich weiß nur nicht, wie man eine Abfrage erneut stellt, wenn der Benutzt was
    falsches eintippt.

    /* Sollte der Benutzer bei irgendeiner Frage was anderes als
    gefordert eingeben, so muss die Frage erneut gestellt werden. */
    
    printf("1. Zahl");  
    scanf("%d", &zahl1); 
    
    printf("2. Zahl");
    scanf("%f", &zahl2); 
    
    printf("3. Zahl");
    scanf("%f", &zahl3); 
    
    printf("4. Zahl");
    scanf("%d", &zahl4); 
    
    ...Algorithmus...
    
    printf("Ergebnis....
    
    return 0;
    

    DAnke für eure Hilfe 🙂
    Gruß A.



  • - return-Wert von scanf auswerten um festzustellen, ob die Eingabe korrekt war
    - restliche Zeichen, die von scanf im Eingabestrom verblieben sind, entfernen
    - eine Schleife (do-while) drumherum, sie solange wiederholt, bis eine korrekte Eingabe erfolgte



  • Und es wäre Benutzerfreundlicher wenn du ein \n am Ende von printf einfügst, oder gleich fputs benutzt.



  • Wenn du nur auf (alle positiv und größer als 0) reagieren musst ist es einfach.
    Wenn du auch auf Buchstaben und zuviel Zeichen erkennen sollst, ist es schwieriger. Wie das geht, hat wutz aber schon geschrieben.

    Du kannst dir auch Funktionen dafür schreiben.

    Bitmapper schrieb:

    Und es wäre Benutzerfreundlicher wenn du ein \n am Ende von printf einfügst, oder gleich fputs benutzt.

    Nö, denn so steht die Eingabe direkt hinter der Ausgabe. Ein Doppelpunkt und Leerzeichen hinter Zahl wäre aber hübsch.



  • 1. Zahl: 42. Zahl: 3.33. Zahl: 2.54. Zahl: 6
    

    Das findest du hübsch?



  • Hast du das ausprobiert?

    Das "2. Zahl" kommt erst, nachdem du du nach der Eingabe der 4 die Entertaste gedrückt hast.
    Und die macht einen Zeilenumbruch.

    1. Zahl: 4
    2. Zahl: 3.3
    3. Zahl: 2.5
    4. Zahl: 6
    

    Du kannst auch alle mögliche Spielchen machen, die darauf beruhen, das scanf bei Whitespace trennt:

    1. Zahl: 4 3.3 2.5 6
    2. Zahl: 3. Zahl: 4. Zahl:
    

    Achso, das \n am Ende vom printf gäbe:

    1. Zahl 
    4
    2. Zahl
    3.3
    3. Zahl
    2.5
    4. Zahl
    6
    

    Und ist das hübsch?



  • DirkB schrieb:

    Das "2. Zahl" kommt erst, nachdem du du nach der Eingabe der 4 die Entertaste gedrückt hast.
    Und die macht einen Zeilenumbruch.

    Sorry, habe ich nicht beachtet.


Log in to reply