Eingabekontrolle



  • Hallo...

    habe hier einen Programmausschnitt:

    #include <iostream>
    #include <stdio.h>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
      long num;
      int inputlength;
    
      cout << "Ganze Zahl eingeben (max. 9 Stellen): ";
      scanf("%ld%n", &num ,&inputlength);
    
      cout << num << endl;
      cout << inputlength << endl;
    
    // Eingabekontrolle
    
      if (inputlength > 9)
        {    
          cout << endl << "!!! Eingabe ist zu gross --> Max. 9 Stellen !!!" << endl  << endl << "Bleliebige Taste zum Verlassen drücken";
          getch();
          exit(0);
        }
    
    ...
    

    Das die Eingabe nicht mehr wie 9 Stellen wird kontrolliert. Eine Kontrolle das nichts anderes wie Zahlen eingegeben wird z.B. Zeichen od. eine Zeichenkette bekomme ich um's verecken nicht hin...

    Wäre froh wenn mir jemand helfen könnte...

    cout << num << endl;
      cout << inputlength << endl;
    

    habe ich nur mal so kurz reingebaut zum gucken was in den Variablen drinsteht. Warum steht in der "num" Variablen immer 4370436 wenn ich was anderes als eine Zahl eingebe zB. A.

    Kann mir jemand diese Konvertierung erklären? Den deswegen kann ich mir keine Kontrolle das keine Zeichen eingegeben werden irgendwie zusammenbauen.

    Gibt es noch eine andere Möglichkeit eine Stellenüberschreitung zu kontrollieren?

    Bin für jeden Tipp dankbar



  • 1st: warum benutzt du scanf("%ld%n", &num ,&inputlength); ??
    und nicht cin>> ??
    2nd: prüfe mit zB

    cin>>num;
    if( cin.fail() ){
      //Fehlerbehandlung
    }
    else{
      //Verarbeitung
    }
    

    3rd: schmeiß <conio.h> und getch() raus
    /*alle Angaben ohne Gewähr*/



  • Mit dem Standard ist die Kontrolle der Eingabe sehr schwer. Wenn du statt eines Integers zB 'A' eingibst wird deiner Variable imho gar nichts zugewiesen. Der Wert 437xxx steht reinzufällig in dieser Variable da lokale Variablen zu Beginn nicht mit 0 initialisiert sind.

    Ein "long num = 0" hilft da ungemein.

    Wenn du wirklich die Eingabe eines 'A' verhindern willst und nur reine Zahlen erlauben willst musst du vom Standard abweichen. Du findest zB in der Konsolen-FAQ einen Thread "Reine Zahleneingaben". Dort wird dir gezeigt wie eine Eingabe für float funktioniert. Das kannst du sehr einfach für Integers portieren!

    MfG SideWinder


Log in to reply