'숫자판별'에 해당되는 글 1건

  1. 2010.11.02 MFC 입력받은 값이 숫자인지 판별. (1)
CString str;
GetDlgItemText(IDC_EDIT, str);

bool bCorrectNum = true;
char* pNumber = LPSTR(LPCTSTR(str));

// 양수 및 음수(+/-) 부호 체크.
if (*pNumber == '-' || *pNumber == '+') pNumber++;

// 문자열 앞에 0 이 있을 경우 0.123 형태의 소수점 숫자인지 잘못된 숫자인지 체크.
if (*pNumber == '0')
{
       pNumber++;
       if (*pNumber != '.')
              bCorrectNum = false;
       else
              pNumber++;
}

// 입력받은 문자열 중간에 숫자가 아닌 문자 존재여부 판별 및 올바른 형태의 숫자여부 판별.
if (bCorrectNum)
{
       int nIndex = 0, nCount = 0;
       while (*pNumber)
       {
              if (*pNumber<'0' || *pNumber>'9')
              {
                     // 소수점 체크. 소수점은 1.234 처럼 숫자 중간에 단 한개만 올 수 있으며,
                     // .123 과 같이 숫자 맨앞에 혹은 123. 과 같이 숫자 맨뒤에 소수점이 올 수 없다.
                     if ( ( *pNumber != '.' ) ||
                          ( *pNumber == '.' && nIndex == 0 ) ||
                          ( *pNumber == '.' && nCount > 0 ) )
                     {
                            bCorrectNum = false;
                            break;
                     }
                     else
                     {
                            *pNumber++;
                            if (*pNumber == NULL)
                            {
                                   bCorrectNum = false;
                                   break;
                            }
                            nCount++;
                      }
              }
              else
                     pNumber++;

              nIndex++
       }
}

if (!bCorrectNum)
       AfxMessageBox("올바른 숫자가 아님.");


입력받은 문자열이 숫자인지 확인하는 코드입니다.
양수와 음수판별도 포함하며 소수점을 가진 숫자까지 모두 판별합니다.

Posted by 루시엔시엘

댓글을 달아 주세요

  1. hwansys 2011.09.16 11:54 신고  댓글주소  수정/삭제  댓글쓰기

    _isnan() 을 쓰면 true/false로 한방에 나옴... ㅋㅋㅋㅋ 헤더는 float.h 다 math.h가 아니여 -_-ㅋ