2011-01-06 18 views
0

Wie können wir überprüfen, ob der Benutzer i/p ist korrekt durch AC-Code .. für ex fragen wir Name und Alter von Benutzer i/p, was sollte die Syntax für überprüfen, ob die eingegebenen Daten sind korrekt oder nicht? Der Code sollte in CÜberprüfen Sie auf korrekte Benutzereingabe

+0

Dies ist die Fehlermeldung, aber wie werden wir überprüfen, ob die i/p-Daten korrekt sind oder nicht .. was wird die Syntax dafür sein .. – kamakshi

+1

Meine eingebaute Verifikation sagen Sie mir Ihre Eingabe oben ist definitiv falsch (fehlt groß Buchstaben, fehlende Interpunktion). Wenn Sie nicht möchten, dass die Frage mit einer richtigen Sprache geschrieben wird, wie erwarten Sie dann, dass jemand sich darum kümmert, eine Antwort zu schreiben? – Suma

Antwort

1

Für den Namen, speichern Sie die Benutzereingabe in einer Zeichenfolge. Durchqueren Sie die Zeichenfolge und sagen Sie einen Fehler, wenn die Array-Elemente nicht "a" zu "z" oder "A" zu "Z" sind. Wenn Alter berücksichtigt wird, können Sie char Array oder Integer verwenden. Bei der Verwendung von Integer, wenn ein Benutzer 'a' eingibt, wird der ASCII-Wert davon verwendet. Aber wenn Sie Char-Array verwenden, können Sie nur für Ziffern und mit einem Limit sehen.

int main()

{

char name[10],age[2]; 
int i; 
printf("Enter name and age \n"); 
scanf("%s %s",name,age); 
for(i=0; name[i]!=NULL; i++) 
    if(isdigit(name[i])) 
     printf("Error, name in aplahbets\n"); 
for(i=0; age[i]!=NULL; i++) 
    if(isalpha(age[i])) 
     printf("Error, age in numbers\n"); 

// Rest of your code Your code 
return 0; 

}

+0

könnten Sie bitte erklären durch Syntax .. – kamakshi

+0

Danke für die Unterstützung ... – kamakshi

+0

Ihre Lösung stürzt für Namen mehr als 9 Zeichen,! = NULL ist auch diffus. – user411313

1

Alter ist in der Regel eine natürliche Zahl von 0 bis 130 reich Je nach Anwendung, ein realistischeres Bereich könnte 15 sein bis 65. Werfen Sie einen Blick auf Ihre Anforderungen.

int IsNaturalNumber(const char* number) 
{ 
    while(*number) { 
     if(!isdigit(*number)) 
      return 0; 
     ++number; 
    } 

    return 1; 
} 

char age[20+1] = { 0 }; 
if(!fgets(age, 20, stdin)) error("EOF reached!"); 
if(!IsNaturalNumber(age)) error("Please enter a natural number!"); 
int age_as_int = atoi(age); 
if(age_as_int < LOWER_AGE_BOUND || age_as_int > UPPER_AGE_BOUND) 
    error("Age must be between %d and %d.", LOWER_AGE_BOUND, UPPER_AGE_BOUND); 

Namen sind knifflig. Was ist ein Eigenname? Eine häufig verwendete Form ist Anrede (Herr/Frau/Miss), Vorname und Nachname/Nachname. Dies deckt viele Kulturen ab. Vergessen Sie nicht, die Sprache zu berücksichtigen. Herr = Herr, Frau = Frau, Fräulein = Fräulein auf Deutsch zum Beispiel. Auch bevorzugen manche Kulturen Familiennamen vor dem Vornamen in Formularen (zB Japan). Was sind Ihre Anforderungen? Musst du alle Kulturen oder nur wenige in Betracht ziehen?

+0

Ich werde nur einen einfachen Namen (Vor- und Nachname) in Erwägung ziehen, jetzt bin ich nicht einschließlich Begrüßung .. – kamakshi

+0

Was ist "Isdigit" hier ?? – kamakshi

+0

@kamakshi: isdigit ist eine Funktion aus der C-Standardbibliothek, die prüft, ob das angegebene Zeichen eine numerische Ziffer darstellt, d. H. Zeichen im Bereich '0' ... '9' – datenwolf

0

Die gängige Methode zur Eingabeüberprüfung besteht darin, die Eingabe als Zeichenfolge in das Programm einzulesen und anschließend zu validieren und in den erwarteten Typ zu konvertieren.

Für Namen gibt es nicht viel nützliche Validierung, die Sie tun können. Sie können (und sollten) überprüfen, ob die Eingabe Ihre Erwartungen nicht überschreitet, ansonsten sollten die meisten Eingaben als gültiger Name betrachtet werden.

Für das Alter gibt es viel mehr Validierung, die Sie tun können. Erstens muss die Eingabe eine gültige Ganzzahl sein und zweitens muss sie innerhalb eines bestimmten Bereichs liegen.

Sie können folgende Funktionen zur Verfügung:

char* readString(char* buffer, size_t buflen) 
{ 
    char* result; 
    result = fgets(buffer, buflen, stdin); 

    if ((result != NULL) && 
     (strlen(result) == buflen-1) && 
     (result[buflen-2] != '\n')) 
    { 
    /* too long a line */ 

    /* read the remainder of the line, to clear the input buffers */ 
    while ((result != NULL) && (result[strlen(result)-1] != '\n')) 
    { 
     result = fgets(buffer, buflen, stdin); 
    } 

    /* set result to NULL to indicate an error */ 
    result = NULL; 
    } 

    if (result != NULL) 
    { 
    /* strip the newline */ 
    result[strlen(result)-1] = '\0'; 
    } 
} 

bool readInt(int low, int high, int* value) 
{ 
    char temp[80]; 

    if (readString(temp, 80)) 
    { 
    char* endp; 
    long result = strtol(temp, &endp, 10); 
    if ((*endp == '\0') && (result >= low) && (result <= high)) 
    { 
     *value = result; 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
    } 
    else 
    { 
    return false; 
    } 
} 
0

Ohne Altersüberlauf/Unter eine kurze Lösung überprüfen könnte:

char name[40]; 
unsigned age; 

if(scanf("%39s%u",name,&age)==2) 
    printf("name=%s age=%u",name,age); 
else 
    puts("input invalid"); 

Sie sollten jemals Check die Erträge von jedem Benutzer -Eingänge.

Verwandte Themen