2017-02-02 3 views
0

Szenario 1:Validierungen in C++ (Konsole)

Die Eingabe wird als Zeichen-Array [20] übernommen und in einer * .dat-Datei gespeichert.

Ich muss die Größe des Arrays überprüfen, überprüfen Sie, ob es Sonderzeichen gibt, numerische und Brief-Groß-/Kleinschreibung.

Da es sich nicht um eine Zeichenfolge handelt, kann ich strlen nicht zur Überprüfung der Länge verwenden. Wenn nicht, ist es möglich, .length or size_t/sizeof Methode

Szenario 2 zu verwenden:

Need Alter, Id und Telefonnummer zu validieren, die ganzen Zahlen in einer Struktur sind (auch auf eine * .dat-Datei gespeichert)

. Für ein Beispiel:

struct patient{ 

    int pId, age ,contactNo; 
} 

void input(){ 

patient obj; 
if ((int)obj.age<=65){ 
//Some Code 
    } 
} 

Die obige Methode hat nicht funktioniert.

Ich muss das Alter mit einer festgelegten Altersgrenze wie die oben genannten validieren. pId sollte nicht mehr als vier Ziffern und die Telefonnummer wird 10 Ziffern ohne "-" dazwischen sein und sollte nur numerische Eingaben erlauben.

Gibt es eine Möglichkeit, die oben genannten Szenarien zu tun. Wenn möglich, es mir bitte ein Beispiel geben ...

+0

1) Haben Sie etwas versucht? Zeig uns dann bitte 2) 1. Es scheint als wäre deine Lösung das Alter zu validieren richtig, was ist das Problem? 2. * 10 Ziffern ohne "-" * - "int" kann dieses "-" nicht haben und es kann einen Überlauf von "int" geben. Also, was ist das Problem genau? Sie wissen nicht, wie Sie Daten lesen oder analysieren oder validieren, oder Sie haben ein bestimmtes Problem im Code? –

+0

@YuriyIvaskevych Hallo! vielen Dank für Ihre Zeit. Das Altersproblem, wie unten beantwortet, hat dieses Problem. Das Telefonnummernformat sollte nicht in 1-908-528-5656 stattdessen etwas wie 0112729729 sein. Die Telefonnummer sollte entsprechend validiert werden. –

Antwort

0

Es ist unklar (zumindest) ist mir, was Sie in Szenario fragen 1.

Szenario 2:

  • Sie benötigen ein Semikolon nach Ihre Struktur Definition
  • sollten Sie entfernt, um die Typumwandlung: (int)obj.age<=65obj.age<=65 sein soll, wie es bereits ein int
  • hinsichtlich pId ist, nur prüfen, ob es unter 10000
  • Für contactNo benötigen Sie eine uint64_t, andernfalls kann es nicht zehn beliebige Ziffern enthalten.

Es kann auch eine gute Idee, um Ihre age und pId Variablen zu machen unsigned int statt int, auf diese Weise die Möglichkeit von negativen age und pId mit einem Minus entfernen.

Sie können ein Objekt vom Typ konstruieren patient wie folgt aus:

patient obj{1234, 47, 1234567}; 
+0

Danke! "Für contactNo brauchst du ein uint64_t, sonst kann es nicht zehn beliebige Ziffern enthalten." Ich verstehe das nicht .... –

+0

Der maximale Wert für ein 'int' ist 2147483647, für' unsigned int' ist es 4294967295. Das heißt, wenn Sie 'int' verwenden, kann die linke Ziffer nicht mehr als 2 (4 für' unsigned int') sein, wenn Sie habe zehn Ziffern. – Jonas

+0

Damit ein Typ 10^10 (zehn Ziffern) mögliche Werte hat, benötigt er mindestens 34 Bits ('ceil (log2 (pow (10,10)) '), d. H. Ein 32-Bit' int 'kann ihn nicht halten. – Jonas