Besondere Abbruchbedingung / Tastatur Eingabe



  • Hallo,

    ich brauche eine Abbruchbedingung, die das Einlesen von int Werten beendet und das weitere Programm durchläuft.

    Abburchbedingungen sollen sein:

    - Keine INTEGER Zahl eingegeben.
    - Wenn nur Return gedrückt wird, soll auch abgebrochen werden.

    Zulässige Eingaben z.B 12, +5, -67
    Unzulässige Eingaben z.B. a, 34c, 34.45, Leerzeichen, nur Return.

    Im Endeffekt sollen aus allen eingegebenen Zahlen der Durchschnitt ermittelt werden. Diese Berechung soll sofort ohne Meldung bei einer falschen Eingabe gestartet werden.

    Mit scanf kann ich leider nicht die "Return" Abbruchbedingung erfüllen.

    Hat jemand eine Idee dazu ? 😕

    Thanks RubDec



  • Vielleicht ist es ne Idee, die Zeichen bis zum nächsten Return einzeln einzulesen,z.b. in ein char array, und dann die abbruchbedingungen zu überprüfen.
    Wenn zum beispiel was anderes als 0-9,+,- eingegeben wurde und + oder - nicht vorne am anfang stehen oder alleine, oder wenn nur enter gedrückt wurde. wenn du dann ein gültiges char array hast, lässt sich das ja dann ganz leicht in einen intwert umwandeln mittels funktion atoi()



  • such im Forum mal nach strtod



  • Hallo erst mal Danke für die Tipps. Aber ich kriegs einfach ned hin. Kann jemand von euch mal ein Codebeispiel posten ?

    Mein Versuch

    int main()
    {
    unsigned int n = 0;
    int zahl;
    float summe= 0.0;
    float ergebnis;
    
    while (scanf("%d\n", &zahl) == 1) 
    {
    summe+= zahl;
    ++n;
    }
    
    ergebnis= summe/n;
    
    printf("Durchschnitt: %f\n",ergebnis);
    
      return 0;
    }
    

    So gehts, aber nur wenn der User die richitgen Zahlen eingibt 🙂

    Gibt jemand die Ziffer 4, 6, und 8a ein, bricht er zwar ab und berechnet, aber nimmt die letzte 8 noch dazu --> Ergebniss = 6 sollte aber 5 sein, da er nur die ersten beiden Zahlen nehmen soll.
    Außerdem soll er auch rechnen, wenn jemand nur RETURN drückt ohne ein Zahl eingegeben zu haben.



  • Mit scanf geht das nicht da es immer so lange konvertiert bis der Wert umgesetzt ist, bzw eine nicht konvertierbares Zeichen auftritt, deswegen hatte ich auf strtod hingewiesen

    Allerdings ziehe ich sttod vor

    Diese Lösung wandelt eine Eingabe in eine float Zahl um. wenn der Eingabe string keine Zahl oder nach dem Ende der Zahl noch weitere
    Zeichen enthält zeigt *err nicht auf '\0' und man weis das ein Fehler aufgetreten ist

    char* err;  
    double umwandlung;
    // teste ob die Eingabe return ist falls nein
    umwandlung = strtod( zahl, &err, 10 ); /* 10 ist die basis des zahlensystems */  
    if ( *err != '\0' )  
      { 
      printf("Zahl ist keine float"}; 
      }
    

Anmelden zum Antworten