안녕하세요 아임코딩입니다.
이번에는 특정한 형식이 정해져있는 데이터를 읽을 때 놓치기 쉬운 점을 같이 확인해 보겠습니다.
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 변수에 의도했던 대로 값들이 잘 저장되는 것을 확인할 수 있습니다.
'프로그래밍 > C' 카테고리의 다른 글
[C언어] visual studio 설치 C언어 개발 환경 구축 (2) | 2024.01.17 |
---|---|
[C언어] C언어란 무엇인가? (0) | 2024.01.17 |
[C언어] 아스키 코드(ASCII) 와 문자형 (0) | 2024.01.10 |
[C언어] scanf() this function or variable may be unsafe. 오류 해결 (0) | 2023.04.30 |
[C언어] 기본 입출력 scanf(), printf() (0) | 2023.04.29 |