Eingabe auf INT überprüfen, wie?



  • Hallöle, ich habe momentan das Problem, dass ich eine Bedingung aufgestellt hab, die Schaut ob die eingegebene Integer keine 0-6 ist. Aber das Problem ist, wenn der User Buchstaben eintippt, dass das Programm dann verrückt spielt. Was müsste ich noch hinzufügen, dass er auch die Bedingung erfüllt, wenn der User Buchstaben eintippt anstatt eiens integer:

    int auswahl2;
    
    printf("Welche Augenzahlen sollen eingetragen werden?\n");
                                    scanf("%d", &auswahl2);
                                    if ((auswahl2!=1)&&(auswahl2!=2)&&(auswahl2!=3)&&(auswahl2!=4)&&(auswahl2!=5)&&(auswahl2!=6)&&(auswahl2!=0)){
    DANN TU DIES UND DAS
    


  • Da bist du in einen beliebten Anfängerfehler gelaufen: Nach scanf("%d", &auswahl2) stehen, wenn Buchstaben eingegeben wurden, diese Buchstaben nach wie vor im Eingabestrom und müssen erst dort herausgeholt werden, bevor weitere Eingaben verarbeitet werden können. Im Fall von Benutzereingaben über die Konsole ist eine einfache Möglichkeit, alles bis zum nächsten Zeilenumbruch wegzuschmeißen.

    Ein möglicher Ansatz wäre also:

    void ignore_rest_of_line(FILE *stream) {
      int c;
      do {
        c = fgetc(stream);
      } while(c != EOF && c != '\n');
    }
    
    ...
    
    if(scanf("%d", &auswahl2) != 1 || auswahl < 0 || auswahl > 6)) {
      ignore_rest_of_line(stdin);
    }
    

    Dabei wird der Rückgabewert von scanf dazu benutzt, festzustellen, ob eine Zahl geparst werden konnte oder nicht, diese ggf. der Bereichsprüfung unterzogen und im Fehlerfall der Rest der Zeile weggeschmissen.



  • hmm hab das mal so gemacht wie Sie es gesagt haben:

    {
              eingabeBeibehalten:
              printf(" \n");
              void ignore_rest_of_line(FILE *stream) {
                int c;
                do {
                  c = fgetc(stream);
                } while(c != EOF && c != '\n');
              }
    
                                printf("Welche Augenzahlen sollen beibehalten werden. Wenn KEINE, dann geben Sie 0 ein?\n");
                                scanf("%d", &auswahl1);
                                if (auswahl1<=6 && auswahl1>0){
                                	  ignore_rest_of_line(stdin);
                                     printf("##########################################\n");
                                     printf("FEHLERHAFTE EINGABE ! #################### Nur eine Eingabe zwischen 1-6 möglich!:\n");
                                     printf("##########################################\n");
                                     goto eingabeBeibehalten;
                                }
    

    Funktioniert immer noch nich^^



  • hab glaube den Fehler:

    if (auswahl1<=6 && auswahl1>0){

    das müsste halt eben nicht gelte, ichänder das mal und dann schau ich erneut...



  • Nun klappts, nur das Intervall stimmme nicht überein mit dem was sein sollte und was nicht. Vielen Dank!



  • Sehr geehrter Herr Vogel,

    Eine Funktion in einer anderen Funktion zu definieren ist nicht zulässig.

    Daher weise ich Sie an, Konstrukte ähnlich dem Folgenden zu unterlassen:

    int main(void)
    {
       int bla = 0;
       printf ("blub\n");
       void andereFunktion (int x)
       {
          // nix gut
       }
       ...
    }
    

    C-Buch schnappen, durcharbeiten, wundern & freuen.
    Und wehe Du kaufst was von Wolf...



  • ich würde dir was einfaches empfehlen:

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    int a;
    char c;

    printf("Welche Augenzahlen sollen eingetragen werden?\n");
    scanf("%d%c", &a, &c);

    if(!(a>=0 && a<=6) || c!='\n'){
    printf("falsche eingabe %d%c", a, c);
    }
    else{
    printf("gute eingabe %d", a);

    //jetzt kannst du hier weitermachen...

    }

    return 0;
    }

    die '' musst du ersetzen...

    Ich hoffe ich konnte dir helfen.

    Tipp: hier im internet sind wir meistens per du 😉

    MFG
    uncannysnake


Anmelden zum Antworten