scanf
함수 개요scanf
함수는 표준 입력으로부터 형식화된 데이터를 읽습니다. 첫 번째 인자로 형식 문자열을 받고, 그 뒤로 읽어온 데이터를 저장할 변수의 주소를 인자로 받습니다.
형식 지정자는 scanf
함수가 입력 데이터를 읽을 때 사용할 형식을 지정합니다. 주요 형식 지정자는 다음과 같습니다:
형식 지정자 | 설명 |
---|---|
%d | 부호 있는 10진수 정수 |
%u | 부호 없는 10진수 정수 |
%o | 8진수 정수 |
%x | 16진수 정수 |
%c | 문자 |
%s | 문자열 |
%f | 부동소수점 (float) |
%lf | 부동소수점 (double) |
%p | 포인터 |
%i | 부호 있는 정수 (10, 8, 16진수 자동 인식) |
scanf
함수 예제 코드#include <cstdio>
int main()
{
{
// 정수 입력
int num = 0;
scanf("%d", &num); // num 앞에 & 를 넣어줘야 한다.
printf("%d\n", num);
}
{
// 문자 입력
int num;
char ch;
int n = scanf("%d %c", &num, &ch); // 성공적으로 입력 받은 변수의 개수를 반환한다.
printf("%d\n", n);
}
{
// num 제대로 입력 받은 경우만 출력을 해준다.
int num;
if (scanf("%d", &num)) // 제대로 입력 받은 경우 1이 반환되고 1은 true 형변환이 된다.
printf("%d\n", num);
}
{
int num0, num1, num2;
scanf("%d + %d = %d", &num0, &num1, &num2); // 형식에 맞춰서 입력을 해줘야 한다. ex) "1 + 1 = 2"
printf("%d + %d = %d\n", num0, num1, num2);
}
{
// 접미사(0x, 0)을 넣어 주면 16진수, 8진수로 입력을 받을 수 있음
int num;
scanf("%i", &num);
printf("%i\n", num);
}
{
// 문자형 입력
char ch;
scanf("%c", &ch);
printf("%c\n", ch);
printf("%d\n", ch);
}
{
// 부동소수점 입력, scanf에서는 %f float, %lf double
float f0;
double d0, d1;
scanf("%lf %lf %f", &d0, &d1, &f0);
printf("%lf %lf %f\n", d0, d1, f0);
}
{
// 8진수 입력
int num;
scanf("%o", &num);
printf("%d\n", num);
}
{
// scanf 오류 처리
char ch;
scanf("%c", &ch);
printf("1, %c\n", ch);
while (getchar() != '\n');
scanf("%c", &ch);
printf("2, %c\n", ch);
}
{
// stdin 을 input.txt에 연결
int num;
freopen("input.txt", "r", stdin);
scanf("%d", &num);
printf("%d\n", num);
}
}
정수 입력:
int num = 0;
scanf("%d", &num);
printf("%d\n", num);
%d
를 사용하여 정수형 값을 입력받습니다.&num
을 사용합니다.문자 입력:
int num;
char ch;
int n = scanf("%d %c", &num, &ch);
printf("%d\n", n);
%d
와 %c
를 사용하여 정수와 문자를 입력받습니다.scanf
는 성공적으로 읽은 변수의 개수를 반환합니다.조건부 출력:
int num;
if (scanf("%d", &num)) // 제대로 입력 받은 경우 1이 반환되고 1은 true 형변환이 된다.
printf("%d\n", num);
scanf
가 입력을 성공적으로 받으면 1을 반환합니다.형식화된 입력:
int num0, num1, num2;
scanf("%d + %d = %d", &num0, &num1, &num2);
printf("%d + %d = %d\n", num0, num1, num2);
접미사를 사용한 입력:
int num;
scanf("%i", &num);
printf("%i\n", num);
%i
를 사용하여 10진수, 8진수, 16진수를 자동으로 인식하여 입력받을 수 있습니다.문자 입력:
char ch;
scanf("%c", &ch);
printf("%c\n", ch);
printf("%d\n", ch);
%c
를 사용하여 문자를 입력받고, 해당 문자의 ASCII 값을 출력할 수 있습니다.부동소수점 입력:
float f0;
double d0, d1;
scanf("%lf %lf %f", &d0, &d1, &f0);
printf("%lf %lf %f\n", d0, d1, f0);
%f
는 float, %lf
는 double 값을 입력받습니다.8진수 입력:
int num;
scanf("%o", &num);
printf("%d\n", num);
%o
를 사용하여 8진수 정수를 입력받습니다.scanf
오류 처리:
char ch;
scanf("%c", &ch);
printf("1, %c\n", ch);
while (getchar() != '\n');
scanf("%c", &ch);
printf("2, %c\n", ch);
getchar()
를 사용하여 입력 버퍼를 비울 수 있습니다.파일로부터 입력받기:
int num;
freopen("input.txt", "r", stdin);
scanf("%d", &num);
printf("%d\n", num);
freopen
을 사용하여 표준 입력을 파일로 리디렉션할 수 있습니다.형식 지정자 | 설명 |
---|---|
%d | 부호 있는 10진수 정수 |
%u | 부호 없는 10진수 정수 |
%o | 8진수 정수 |
%x | 16진수 정수 |
%c | 문자 |
%s | 문자열 |
%f | 부동소수점 (float) |
%lf | 부동소수점 (double) |
%p | 포인터 |
%i | 부호 있는 정수 (10, 8, 16진수 자동 인식) |