2011-01-06 4 views
0

어떻게 사용자 i/p가 ac 코드를 통해 정확한지 확인할 수 있습니다 .. 예를 들어 우리는 사용자 i/p의 이름과 나이를 묻는 중 어떤 구문을 사용해야하는지 입력 된 데이터가 맞는지 여부 코드는 C 언어 여야합니다.정확한 사용자 입력을 확인하십시오

+0

이것은 오류 메시지이지만 i/p 데이터가 올바른지 여부를 확인하는 방법은 무엇입니까? – kamakshi

+1

위의 입력 내용은 위 입력 내용이 정확하지 않음을 나타냅니다. 편지, 구두점 누락). 적절한 언어를 사용하여 질문을 쓰지 않으려는 경우, 누군가가 답변을 쓰기 위해 어떻게 신경 쓸 것으로 기대합니까? – Suma

답변

1

사용자 입력란은 문자열로 저장하십시오. 배열 요소가 'a'에서 'z'또는 'A'에서 'Z'가 아니면 문자열을 탐색하고 오류를 말하십시오. 연령에 따라 char 배열 또는 정수를 사용할 수 있습니다. 사용자가 'a'를 입력하면 정수를 사용하면서 ascii 값이 사용됩니다. 그러나 문자 배열을 사용하면 숫자와 한도 만 볼 수 있습니다.

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는 주어진 문자가 숫자 숫자, 즉 '0'... '9'범위의 문자를 나타내는 지 확인하면서 C 표준 라이브러리의 함수입니다. – datenwolf

0

입력 유효성 검사를 수행하는 일반적인 방법은 입력을 프로그램으로 문자열로 읽은 다음 프로그램의 유효성을 검사하고 예상되는 유형으로 변환하는 것입니다.

이름의 경우 사용자가 할 수있는 유용한 유효성 검사가별로 없습니다. 입력 값이 예상 값을 초과하지 않는지 검사 할 수 있지만 그렇지 않으면 대부분의 입력을 유효한 이름으로 간주해야합니다.

연령대에 따라 더 많은 유효성 확인이 가능합니다. 먼저 입력은 유효한 정수 여야하며 두 번째로 특정 범위 내에 있어야합니다.

다음과 같은 기능을 사용할 수 있습니다 : 수/언더 짧은 솔루션을 확인 모든 연령 오버 플로우없이

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

당신해야 사용자로부터 수익 확인 - 입력.

관련 문제