C언어 초급 - 4장: 입출력 함수 (4.1 입력 함수 scanf())
2025. 2. 23. 16:39ㆍ프로그래밍 언어/C
4.1 입력 함수 scanf()
C 언어에서 scanf() 함수는 사용자가 입력한 데이터를 변수에 저장하는 역할을 합니다.
scanf()는 표준 입력(키보드)에서 데이터를 읽어 변수에 저장하는 함수이며, #include <stdio.h> 헤더 파일을 포함해야 사용할 수 있습니다.
1. scanf() 함수란?
- scanf()는 키보드로부터 입력된 값을 변수에 저장하는 함수입니다.
- 형식 지정자(Format Specifier)를 사용하여 입력받을 데이터의 유형을 지정합니다.
- 공백(띄어쓰기, 엔터, 탭 등)을 기준으로 입력을 구분합니다.
1.1 scanf() 함수 기본 문법
scanf("형식 지정자", &변수);
📌 주의할 점
- &(앰퍼샌드)를 변수 앞에 붙여 메모리 주소를 전달해야 값이 저장됨 (char 배열 제외).
- 입력 형식에 맞지 않는 데이터를 입력하면 오류가 발생할 수 있음.
2. 정수 입력 (%d)
정수를 입력받으려면 %d 형식 지정자를 사용합니다.
2.1 정수 입력 예제
#include <stdio.h>
int main() {
int num;
printf("정수를 입력하세요: ");
scanf("%d", &num);
printf("입력한 정수: %d\n", num);
return 0;
}
실행 예시
정수를 입력하세요: 42
입력한 정수: 42
📌 주의할 점
- scanf("%d", &num); → 변수 num의 메모리 주소(&num)를 전달해야 값이 저장됨.
- 숫자가 아닌 문자를 입력하면 예기치 않은 동작이 발생할 수 있음.
3. 실수 입력 (%f, %lf)
실수를 입력받으려면 %f(float), %lf(double) 형식 지정자를 사용합니다.
3.1 실수 입력 예제
#include <stdio.h>
int main() {
float num1;
double num2;
printf("float형 실수 입력: ");
scanf("%f", &num1);
printf("double형 실수 입력: ");
scanf("%lf", &num2);
printf("입력한 float: %.2f\n", num1);
printf("입력한 double: %.6lf\n", num2);
return 0;
}
실행 예시
float형 실수 입력: 3.14
double형 실수 입력: 2.718281
입력한 float: 3.14
입력한 double: 2.718281
📌 주의할 점
- float → %f, double → %lf 사용 (%lf는 double용).
- 출력할 때 소수점 자리수를 지정할 수 있음 (%.2f → 소수점 2자리까지 출력).
4. 문자 입력 (%c)
문자를 입력받으려면 %c 형식 지정자를 사용합니다.
4.1 단일 문자 입력 예제
#include <stdio.h>
int main() {
char ch;
printf("문자 입력: ");
scanf(" %c", &ch); // 공백 추가
printf("입력한 문자: %c\n", ch);
return 0;
}
실행 예시
문자 입력: A
입력한 문자: A
📌 주의할 점
- scanf(" %c", &ch); → 공백(" ")을 추가해야 이전 입력(엔터, 공백)과 충돌하지 않음.
- 공백을 넣지 않으면 이전 입력의 개행 문자(\n)가 ch에 저장될 수 있음.
5. 문자열 입력 (%s)
문자열을 입력받으려면 %s 형식 지정자를 사용합니다.
5.1 문자열 입력 예제
#include <stdio.h>
int main() {
char name[20];
printf("이름을 입력하세요: ");
scanf("%s", name);
printf("입력한 이름: %s\n", name);
return 0;
}
실행 예시
이름을 입력하세요: Alice
입력한 이름: Alice
📌 주의할 점
- 문자열을 받을 때는 &(앰퍼샌드) 없이 변수명만 사용 (scanf("%s", name);).
- 띄어쓰기 이후 문자는 무시됨.
예를 들어 "Alice Wonderland"을 입력하면 "Alice"만 저장됨.
6. scanf()에서 여러 개의 값 입력받기
scanf()를 사용하여 여러 개의 값을 한 번에 입력받을 수도 있습니다.
6.1 여러 값 입력 예제
#include <stdio.h>
int main() {
int age;
float height;
printf("나이와 키를 입력하세요 (예: 25 175.5): ");
scanf("%d %f", &age, &height);
printf("입력한 나이: %d\n", age);
printf("입력한 키: %.1f cm\n", height);
return 0;
}
실행 예시
나이와 키를 입력하세요 (예: 25 175.5): 30 180.2
입력한 나이: 30
입력한 키: 180.2 cm
📌 주의할 점
- 공백(띄어쓰기) 또는 엔터로 값을 구분하여 입력해야 함.
7. scanf()의 개행 문자(\n) 처리
scanf()는 입력 후 엔터(\n)를 남겨두기 때문에, 이후 char 입력이 예상치 못한 동작을 할 수 있습니다.
7.1 scanf() 입력 후 개행 문자 처리
#include <stdio.h>
int main() {
int age;
char grade;
printf("나이를 입력하세요: ");
scanf("%d", &age);
getchar(); // 개행 문자 처리
printf("학점(A/B/C/D/F)을 입력하세요: ");
scanf("%c", &grade);
printf("입력한 나이: %d\n", age);
printf("입력한 학점: %c\n", grade);
return 0;
}
📌 설명
- getchar(); → scanf()가 남긴 개행 문자(\n)를 제거하는 역할.
8. 정리
입력 형식 | 형식 지정자 | 사용 예제 |
정수 입력 | %d | scanf("%d", &num); |
실수 입력 (float) | %f | scanf("%f", &num); |
실수 입력 (double) | %lf | scanf("%lf", &num); |
문자 입력 | %c | scanf(" %c", &ch); (공백 추가) |
문자열 입력 | %s | scanf("%s", name); |
📌 입력 시 주의할 점
- %c 사용 시 공백(" ")을 추가하여 개행 문자 문제 방지.
- 문자열 입력(%s)은 공백을 포함하지 않으며, 개행(\n)을 남기지 않음.
- getchar()를 사용하여 scanf()가 남긴 개행 문자를 제거 가능.
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 초급 - 4장: 입출력 함수 (4.3 putchar()와 puts()) (0) | 2025.02.23 |
---|---|
C언어 초급 - 4장: 입출력 함수 (4.2 gets()와 fgets() 비교) (0) | 2025.02.23 |
C언어 초급 - 3장: 변수와 데이터 타입 (3.3 상수 (const)) (0) | 2025.02.23 |
C언어 초급 - 3장: 변수와 데이터 타입 (3.2 기본 데이터 타입) (0) | 2025.02.23 |
C언어 초급 - 3장: 변수와 데이터 타입 (3.1 변수란?) (0) | 2025.02.23 |