Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 사용자 입력의 데이터 유형을 판별하는 프로그램

이 문서에서는 사용자로부터 입력을 받아, 그 입력값이 어떤 데이터 유형인지 판별하는 C++ 프로그램을 만드는 방법을 알아봅니다.

문제 설명

사용자가 입력한 값을 받은 뒤, 해당 값이 정수, 실수, 문자열 중 무엇에 해당하는지 확인하는 것이 과제입니다.

예제로 이해하기

예제 1

입력 − 34

출력 − 정수(Integer)입니다.

예제 2

입력 − tutorialspoint

출력 − 문자열(String)입니다.

해결 접근 방법

판별 로직은 다음과 같은 단계로 구성됩니다.

  1. 입력받은 문자열이 숫자인지 아닌지 먼저 검사합니다.
  2. 숫자라면, 그 값이 정수인지 소수점을 포함한 실수인지 추가로 확인합니다.
  3. 숫자가 아니라면 문자열로 판단합니다.

구현 예제 코드

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
    char input[50] = "";
    double temp;
    int intVal;
    char stringVal[50] = "";
    double val = 1e-12;
    fgets(input, 100, stdin);
    if (sscanf(input, "%lf", &temp) == 1) {
        intVal = (int)temp;
        if (fabs(temp - intVal) / temp > val)
            printf("The input is a floating point\n");
        else
            printf("The input is an integer\n");
    }
    else if (sscanf(input, "%s", stringVal) == 1)
        printf("The input is a string\n");
    else
        printf("input not recognized\n");
}

코드 동작 원리

fgets() 함수로 사용자 입력을 문자열 형태로 받은 후, sscanf()를 활용해 입력값의 유형을 판별합니다.

  • %lf 서식 지정자: 입력을 실수(double)로 변환할 수 있는지 시도합니다. 변환에 성공하면(== 1) 입력은 숫자입니다.
  • 정수·실수 구분: 값을 정수로 강제 형변환한 뒤 원래 값과의 차이를 fabs()로 계산합니다. 차이가 임계값(1e-12)보다 크면 소수 부분이 존재하는 실수, 그렇지 않으면 정수로 판별합니다.
  • %s 서식 지정자: 숫자로 해석되지 않는다면 문자열로 읽어 들여 문자열로 출력합니다.

실행 결과 확인

입력

452

출력

The input is an integer

이처럼 sscanf()의 반환값과 수학 함수를 조합하면, 별도의 복잡한 라이브러리 없이도 사용자 입력의 데이터 유형을 간단하고 효율적으로 판별할 수 있습니다.