티스토리 뷰
이전 글
2021/02/06 - [코딩 공부/C 언어] - C언어 기초 : 암시적 형변환과 명시적 형변환
이번 포스트에서 공부할 것은 scanf 함수입니다.
이제 이론 공부는 적당히 하고 본격적으로 코드를 쓰면서 프로그램을 만들어 볼 거에요.
재밌겠죠? ㅋㅋ
1. scanf 가 뭘까?
표준 입력장치인 키보드를 통해 응용 프로그램이 실행하는 중에 원하는 정보를 입력하여 변수에 저장하는 표준함수.
지금까지는 코드를 쓸 때 변수에 값을 넣어주고 프로그램이 실행되면 내가 저장한 값을 출력하는 것을 해 보았습니다.
근데 이렇게 하면 프로그램을 실행한 뒤에는 변수에 저장된 값을 바꿀 수 없습니다.
이렇게만 프로그램을 만들면 미리 지정된 값을 출력할 때 외에는 쓸 데가 없습니다.
프로그램을 쓰는 사람이 저장하고 싶은 정보를 실시간으로 입력받고 저장할 수 있어야 좀 더 쓸모가 있겠죠.
그래서 사용하는 것이 scanf 함수입니다.
2. scnaf 형식
scanf("서식문자", 변수의 주소, 변수의 주소, 변수의 주소, ....);
기본적인 사용법은 printf와 비슷한데 큰 따옴표 안에 데이터를 입력 받아 저장할 변수의 자료형에 맞는 서식문자를 쓴 다음 큰 따옴표의 바깥에는 각 서식문자에 대응되는 변수의 주소를 적어주면 됩니다.
근데 이렇게만 보면 무슨 소린지 잘 모르겠죠?
제가 처음에 그랬거든요...ㅎ
일단 실제 사용하는 예시를 한 번 봅시다.
정수 입력받을 때 | 실수 입력받을 때 |
int num; scanf("%d", &num); |
float fnum; scanf("%f", &float); |
단일문자 입력받을 때 | 문자열 입력받을 때 |
char ch; scanf("%c", &ch); |
char string[10]; scanf("%s", string); |
변수를 저장할 자료형에 맞게 위와 같이 써 주시면 됩니다.
여기서 기억해야 할 것은 큰 따옴표 다음에 서식문자에 대응되는 변수의 이름을 쓸 때 변수 이름 앞에 &를 꼭 써야 한다는 것입니다.
함수의 괄호 안에 변수를 넣었을 때 &를 쓰면 그 변수의 주소로 직접 가서 그 안에 있는 값을 참고해라는 의미입니다.
우리가 그 동안 printf 함수를 쓸 때는
printf("%d", num);
이렇게 변수 이름을 써 주기만 했었잖아요?
이건 그냥 출력만 하면 되니까 num의 집 안에 들어갈 필요 없이 밖에서 니가 가지고 있는 값을 알려달라고만 해도 됩니다.
하지만 scanf 함수는 사용자에게서 데이터를 입력받아 변수에 실시간으로 저장하는 함수인데
저장을 한다는 것은 내용물을 직접 바꿔야 한다는 뜻이 되기도 하죠?
그럴려면 num의 집 안에 들어가야 집 안의 가구를 바꿀 수 있을 것입니다.
num의 집 안에 들어가려면 num의 집주소가 있어야겠죠.
그래서 scanf 를 쓸 때엔 변수의 주소를 따라가라는 뜻으로 &를 붙여주는 것입니다.
최대한 간단하게 설명해 보았는데 이건 나중에 포인터를 배울 때 더 자세히 배울 내용이라 당장 이해가 가지 않으시면 scanf 함수를 쓸 때엔 변수 이름 앞에 무조건 &를 붙인다는 것만 기억하시면 됩니다.
사실 붙이지 않으면 프로그램이 실행되지가 않아서 강제로 기억하게 되실 거에요 ㅎㅎ
근데 위의 표를 다시 보면 맨 마지막 문자열 입력에서는 변수의 이름 앞에 &를 쓰지 않습니다.
이건 제가 제대로 안 쓴 것이 아니라...
문자열은 배열로 만드는데 배열의 이름엔 배열의 시작주소가 들어있기 때문에 &를 쓸 필요가 없습니다.
한마디로 문자열 변수 이름만 봐도 문자열의 집주소를 알 수 있다는 거죠.
배열은 나중에 자세히 배우니까 지금은 %s 를 쓸 때엔 &가 필요없다는 것만 기억하시면 됩니다.
3. scanf 로 숫자 입력받기
#include<stdio.h>
void main()
{
int num1, num2, sum;
printf("두 정수를 입력하시오 : ");
scanf("%d%d", &num1, &num2);
sum = num1 + num2;
printf("%d + %d = %d", num1, num2, sum);
}
코드창에 이렇게 입력하고 실행해봅시다.
코딩 공부 초반에는 복붙하지 말고 직접 타이핑해서 따라 쓰시는 게 더 도움됩니다.
실행하면 커서가 깜박거리며 입력을 기다리고 있습니다.
이런 식으로 정수 두 개를 입력하고 엔터를 누르면 두 정수를 더한 결과를 출력하고 프로그램이 종료됩니다.
그럼 코드를 한 줄씩 다시 보겠습니다.
int num1, num2, sum;
printf("두 정수를 입력하시오 : ");
메인 함수의 첫줄에서 int형 변수 num1, num2, sum을 만들었습니다.
그 다음 줄에서 printf 함수를 사용해 두 정수를 입력하라는 메시지를 출력했습니다.
여기까지는 했던 거니까 쉽죠?
scanf("%d%d", &num1, &num2);
그 다음 줄을 보면 scanf 함수를 사용해 num1과 num2 변수에 데이터를 입력받습니다.
scanf 함수에서 큰 따옴표 안에 서식문자를 쓸 때엔 여러개여도 띄어쓰기 없이 씁니다.
그래서 프로그램을 실행하면 커서가 깜박이며 입력을 기다리고 있는 것입니다.
여기서 정수 두 개를 입력하고 엔터를 누르면 각 변수에 내가 입력한 정수가 저장됩니다.
sum = num1 + num2;
printf("%d + %d = %d", num1, num2, sum);
남은 두 줄을 마저 봅시다.
sum 변수에 num1 과 num2 를 더한 값을 저장했습니다.
그리고 마지막으로 printf 함수를 사용해 num1, num2를 더한 값 sum을 출력했습니다.
그 결과 내가 입력한 정수 두개를 더한 결과가 정상적으로 출력되었습니다.
이제 프로그램을 실행한 후에 실시간으로 데이터를 입력받는 방법을 알게 되었습니다.
쉽죠?
ㅎㅎㅎ
4. scanf 로 문자열 입력받기
#include<stdio.h>
void main()
{
char name[10];
printf("이름 입력 : ");
scanf("%s", name);
printf("내 이름은 %s 입니다.", name);
}
이번에는 이 코드를 적어봅시다.
실행하면 이번에도 커서가 깜박거리며 입력을 기다리고 있습니다.
이름을 입력하고 엔터를 누르면 마지막 문장이 출력되고 프로그램이 종료됩니다.
그럼 코드를 한 줄씩 보겠습니다.
char name[10];
메인 함수의 첫 줄에서 char형 문자열 변수 name[10]을 선언했습니다.
char name[10];이라고 쓰면 단일문자 10개를 저장할 수 있는 길이의 문자열 변수를 만들겠다고 컴퓨터에게 알려주는 것입니다.
char name[100]이라면 단일문자 100개를 저장할 수 있는 변수죠.
이것을 배열이라고 하는데 배열에 관한 자세한 설명은 나중에 하고 지금은 문자열을 저장할 땐 이렇게 한다고만 알고 계시면 됩니다.
문자열을 저장할 때 영어나 띄어쓰기 등은 한 칸을 차지하는데 한글과 특수문자는 두 칸을 차지하는 것으로 간주됩니다.
이 점만 잘 기억해서 배열의 길이를 만드시면 됩니다.
printf("이름 입력 : ");
그리고 다음 줄에서 printf 함수로 이름을 입력하라는 메시지를 출력했습니다.
scanf("%s", name);
그 다음 줄에서 scanf 함수를 사용해 name 배열에 문자열을 입력받습니다.
여기까지 실행된 결과로 커서가 깜박이며 입력을 기다리고 있습니다.
여기서 이름을 입력하고 엔터를 누르면
printf("내 이름은 %s 입니다.", name);
마지막 줄 printf 함수가 실행되면서 name 변수에 입력된 이름이 출력됩니다.
여기까지도 크게 어려운 건 없으시죠?
scanf 함수를 쓸 때엔 변수 이름 앞에 &를 붙이는데 문자열 변수 앞에는 붙이지 않는다는 것만 기억하시면 됩니다.
그럼 마지막으로 문제 몇 개만 풀어보고 오늘의 공부를 마무리 해봅시다.
1. 알파벳을 입력 받아 해당 알파벳 다음순서의 알파벳을 출력하시오.
2. 실수를 입력 받아 출력하시오.
3. 국어 수학 영어 점수를 받아 그 합계와 평균을 출력하시오.
4. 이름과 나이를 입력 받아 출력하시오.
오늘 배운 scanf 함수만 잘 활용하시면 충분히 풀 수 있는 문제들입니다.
위 이미지를 참고해서 최대한 검색 없이 스스로 풀어보시고 피드백이 필요하시다면 댓글 남겨주세요.
그럼 다음 포스트에서 만나요~^^
'코딩 공부 > C 언어' 카테고리의 다른 글
C 언어 기초 : 연산자 1 (0) | 2021.04.14 |
---|---|
C 언어 기초 : scanf 함수 문제 정답 (0) | 2021.02.14 |
C언어 기초 : 암시적 형변환과 명시적 형변환 (0) | 2021.02.06 |
C언어 기초 : 자료형 (0) | 2021.01.24 |
C언어 기초 : 변수 (0) | 2021.01.24 |
- Total
- Today
- Yesterday
- c언어
- 아이패드
- 코딩공부
- DFS
- 캐나다
- 컴퓨터사이언스
- 너비우선탐색
- C언어기초
- 문제풀이
- 깊이우선탐색
- 해커랭크
- 백준
- 컴퓨터공부
- 스위프트플레이그라운드
- 알고리즘
- 그리디
- dp
- 다이나믹프로그래밍
- 하드웨어
- hackerrank
- 컴퓨터
- greedy
- c++
- 영어공부
- 프로그래밍
- 기초
- 애플
- 캐나다생활
- 프로그래머스
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |