2010-08-12 7 views
3

사용자 데이터의 유효성을 검사하기 위해 C에 간단한 프로그램을 사용해 보았습니다. 이 프로그램은 사용자가 문자를 입력했는지 여부를 숫자, 알파벳 또는 특수 문자로 식별합니다.C의 데이터 유효성 확인

어떻게 든이 코드는 모든 종류의 입력 문자를 숫자로 식별합니다. 아래 코드를 추가했는데, 누군가 내가 잘못 가고있는 것을 친절하게 지적 할 수 있다면 고맙겠습니다.

// 프로그램은 사용자로부터 입력을하고 문자, 숫자 또는 특수 문자

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 


    char ch; 

int main() 

{ 
    clrscr(); 

    printf("Enter a character \n"); 
    scanf("%c \n",ch); 

    if ((ch>='A'&& ch<='Z')||(ch>='a'&& ch<='z')) 
    { 
     printf("The character entered is an alphabet \n"); 

    } 
    else if ((ch>=0)&&(ch<=9)) 
    { 
     printf("Character entered is an number \n"); 
    } 


    else 
    { 
     printf("Character entered is a special character"); 

    } 
    return 0; 
} 
+0

당신은''에서'isalpha에()'와'isdigit에을()'의 사용을 고려 –

+1

그 코드 블록을 정리 할 수 ​​있습니다 – caf

+0

BTW, Arun, 질문하는 좋은 방법입니다. 과도하게 장황하지 않고 진단하기 위해 필요한 모든 것을 제공했습니다 (코드와 문제점). 그냥 알려주고 (그리고 질문을 upvoting), 우리는 앞으로 당신에게서 더 많은 질문을 얻을 수 있기를 바랍니다. –

답변

1

아, 아룬 매우 어리석은 실수인지 여부를 확인합니다. 두 번째 조건은 작은 따옴표로 0과 9를 올바르게 입력해야합니다.

그래서, 당신의 코드가 될 것입니다

-

if ((ch>='A'&& ch<='Z')||(ch>='a'&& ch<='z')) 
{ 
    printf("The character entered is an alphabet \n"); 

} 
else if ((ch>='0')&&(ch<='9')) 
{ 
    printf("Character entered is an number \n"); 
} 
else 
{ 
    printf("Character entered is a special character"); 

} 

이 유일한 실수가 될 수 있습니다. 이제는 효과가 있습니다.

4

scanf%c의 인수로 포인터을 허용합니다. scanfch를 수신하고, 상기 기준 연산자 (&)없이

scanf("%c\n",&ch); 

: 즉,

scanf("%c \n",ch); 

같이 작성한다. ch가 설정되어 있기 때문에이 경우에는 값이 쓰레기. * 참조하기는 chch하지 ch 자체에 포인터 scanf 제공하므로 scanf 포인터를 역 참조하여 ch의 값을 수정할 수있다 (참조 연산자를 사용 *) .

숫자 확인 문제는 Himadri mentioned입니다.

* 실제로는 의 정의되지 않은 동작입니다. 스타일에

0

몇 가지 의견 :

  1. conio.h와와 clrscr()는 비 표준입니다.
  2. 전역 변수가 잘못되었습니다 (char ch). 정적이 아닌 것을 선언하는 것도 나쁘다.
  3. 항상 scanf의 반환 값을 확인하십시오. 이렇게하면 입력 형식 오류를 잡는 데 도움이됩니다. 이 경우, 단일 문자 만 필요하므로 getchar이 더 적절합니다.

이 내가이 프로그램을 작성했습니다 것이 방법입니다

#include <stdio.h> 
#include <ctype.h> 

int main() 
{ 
    int ch; /* We use an int because it lets us check for EOF */ 
    printf("Enter a character: "); 
    fflush(stdout); /* Remember to flush the output stream */ 
    ch = getchar(); 
    if (ch == EOF) 
    { 
     printf("end-of-file or input-error\n"); 
     return 1; 
    } 
    if (isalpha(ch)) 
    printf("The character entered is an alphabet\n");  
    else if (isdigit(ch)) 
    printf("Character entered is an number\n");  
    else 
    printf("Character entered is a special character\n");  
    return 0; 
} 
+1

전역 변수가 항상 * 나쁜 것은 아닙니다. 그는 배우고있다. 편하게 하다. 귀하의 재 작성은 너무 많은 혼란을 야기 할 수 있습니다. 'getchar','fflush' (추한),'EOF','ctype.h'와 함수를 소개합니다. – strager

+0

@strager 좋아, 그는 이유식 때 사용할 수 있습니다 :-) –