본문 바로가기
프로그래밍/C

[C언어] 특정 형식 입력(숫자/숫자/숫자)

by 아임코딩 2023. 4. 30.
728x90
반응형

안녕하세요 아임코딩입니다.

 

이번에는 특정한 형식이 정해져있는 데이터를 읽을 때 놓치기 쉬운 점을 같이 확인해 보겠습니다.

c언어에서 입력은 주로 scanf() 함수를 이용하여 받습니다.

 

예를 들어서 사용자가 날짜에 대한 정보를 년도/월/일 의 형태로 입력을 한다고 가정해 봅시다.

사용자가 만약 2023년 4월 30일의 데이터를 입력한다면 2023/04/30 처럼 입력을 하고싶을 때 scanf()를 이용하여 세 숫자를 서로 다른 변수에 저장하는 것이 목표입니다.

 

사용자에게 년도/월/일 자료 형식을 입력받고 각각 int 자료형 변수에 저장한 후 출력하는 코드를 작성해봤습니다.

 

#include<stdio.h>

int main()
{
	int year;
	int month;
	int day;

	scanf("%d%d%d", &year, &month, &day);

	printf("year : %d, month : %d, day : %d", year, month, day);
	
}

코드 실행 화면

사용자가 2023/04/30을 입력하면 2023, 04, 30 을 각각 다른 변수에 저장한 후 출력하는 것이 프로그램의 목표이지만 

의도했던 바와는 다르게 year 변수에는 2023이 잘 저장되었지만 month와 day 변수에는 이상한 값이 저장되어 있는 것을 확인할 수 있습니다.

 

이러한 결과가 나오는 이유는 사용자는 2023/04/30을 입력하지만 코드 상에서 입력을 받는 scanf() 함수 안에는 

"%d%d%d" 이렇게 정수를 연속해서 3번 받겠다고 형식을 지정해줬기 때문입니다.

 

따라서 입력받는 형식 그대로 코드 상에서도 입력을 받는 형식을 똑같이 맞춰줘야합니다.

 

scanf("%d/%d/%d", &year, &month, &day);

이런 식으로 말이죠.

 

수정 한 코드를 살펴보고 실행해보겠습니다.

 

 

#include<stdio.h>

int main()
{
	int year;
	int month;
	int day;

	scanf("%d/%d/%d", &year, &month, &day);

	printf("year : %d, month : %d, day : %d", year, month, day);
	
}


코드를 수정하고 실행해보니 year, month, day 변수에 의도했던 대로 값들이 잘 저장되는 것을 확인할 수 있습니다.

 

728x90
반응형