2011-01-06 8 views
0

ユーザーIDが正しいかどうかを確認するにはどうすればいいですか? 私はユーザーi/pから名前と年齢を問い合せています。入力されたデータは正しいかどうか? コードはC言語にする必要があります。正しいユーザー入力を確認する

+0

これはエラーメッセージですが、i/pデータが正しくないかどうかを確認する方法を教えてください。 – kamakshi

+1

私の組み込み検証はあなたの入力が間違っています手紙、句読点がない)。適切な言語を使用して質問を書く気にしない場合、どのように誰かが世話をして答えを書くことを期待していますか? – Suma

答えて

1

名前は、ユーザー入力を文字列で保存します。配列要素が 'a'から 'z'または 'A'から 'Z'にならない場合は、文字列をたどり、エラーを言います。年齢を考慮すると、char配列または整数を使用できます。ユーザーが 'a'を入力すると整数を使用している間にそのASCII値が使用されます。しかし、char配列を使用すると、数字だけと制限があります。

メインINT()

{

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

構文を使って説明してください。 – kamakshi

+0

thanx(サポートあり)... – kamakshi

+0

名前が9文字以上の場合、ソリューションがクラッシュする、!= NULLも拡散します。 – user411313

1

年齢は、典型的には、アプリケーションに応じて0から130の範囲の自然数であり、より現実的な範囲は、15であるかもしれませんあなたの要件を見てください。

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); 

名前はトリッキーです。正しい名前は何ですか?一般的に使用される形式は、敬称(Mr/Mrs./Miss)、名および姓/姓です。これは多くの文化をカバーしています。言語を考慮に入れることを忘れないでください。 Mr. = Herr、Mrs. = Frau、Miss =Fräulein、ドイツ語など。また、いくつかの文化では、姓の前に姓(たとえば日本)が好きです。あなたの要件は何ですか?あなたはすべての文化を考慮する必要がありますか?

+0

私はただの名前(姓と名)を考えていますが、今私は敬意を表していません。 – kamakshi

+0

"isdigit"は何ですか? – kamakshi

+0

@kamakshi:isdigitは、Cの標準ライブラリの関数であり、指定された文字が数値の数字、つまり '0' ... '9' – datenwolf

0

入力の検証を行う一般的な方法は、入力をプログラムに文字列として読み込み、検証して予想される型に変換することです。

名前の場合、あなたにできる有効なバリデーションはあまりありません。入力があなたの予想を超えていないことを確認することができますが、そうでなければほとんどの入力は有効な名前とみなされます。

年齢には、さらに多くのバリデーションがあります。最初に、入力は有効な整数でなければならず、第2に、それは特定の範囲内でなければなりません。

あなたは以下の機能を使用できます。短いソリューションをチェックアンダーフロー/任意の年齢オーバーフローなしで

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

は次のようになります。

char name[40]; 
unsigned age; 

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

あなたはこれまで任意のユーザからのリターンを確認する必要があります-inputs。

関連する問題