-
반응형
- 표준 입력 함수 scanf는 scan format의 줄임 표현
- 다양한 키워드를 사용하여 문자, 문자열뿐 아니라 정수, 실수까지 모두 입력 받을 수 있도록 형식화된 입력을 제공
- 형식화된 입력:자신이 입력 받을 데이터의 종류, 자릿수, 입력 형식을 지정하여 입력
int data; scanf(“%d”, &data); // scanf는 포인터 기반의 함수이기 때문에, &를 꼭 넣어야함
// scanf 함수를 사용하여 정수와 실수 값 입력 받기 #include <stdio.h> void main() { int int_data; float float_data; scanf(“%d”, &int_data); scanf(“%f”, &float_data); printf(“input : %d, %f \n”, int_data, float_data); }
scanf 함수에서 & 연산자를 사용하는 이유
- scanf 함수는 포인터 문법을 사용하여 값을 반환
int num1, num2; scanf(“%d %d”, &num1, &num2);
scanf 함수에서 입력된 값을 구분하는 방법
- 입력된 여러 개의 데이터를 Enter 키와 공백(Space) 문자로 구분
- 특별한 값 없이 Enter 키나 공백 문자가 여러 개 입력되면 입력을 무시하고 실제 정보를 기준으로 입력 받음
scanf 함수에서 문자열을 입력받을 때 주의할 점
- scanf 함수로 문자열을 입력받을 때 중간에 공백이 들어가면 자신이 원하는 문자를 다 입력받지 못하는 문제 발생
특사용자가 입력하는 문자열에 공백이 포함된다면 gets 함수를 사용하는 것이 더 좋음
// scanf 함수를 사용하여 문자열을 입력받음 #include <stdio.h> void main() { char temp[32]; scanf(“%s”, &temp); // 문자열을 입력받음 printf(“input string : %s\n”, temp); // 입력받은 문자열을 출력 }
공백 문자로 구분해서 여러 개의 정보 입력받기
scanf 함수로 정수 값을 입력받을 때 8진법(%o), 10진법(%d), 16진법(%x)을 구별해서 사용 가능
// 공백 문자로 구분해서 scanf 함수로 8, 10, 16진수 입력받기 #include <stdio.h> void main() { int num1, num2, num3; scanf(“%o %d %x”, &num1, &num2, &num3); // 8, 10, 16진수 값 입력 printf(“input string : %d %d %d\n”, num1, num2, num3); // 10 10 10 입력 시 출력결과 -> input : 8, 10, 16 }
scanf 함수는 입력 형식 키워드와 자료형이 일치해야 함
printf 함수와 다르게 scnaf 함수는 포인터를 사용하기 때문에 형식을 지정하는 키워드와 변수의 자료형이 맞지 않으면 프로그램에 오류 발생
char data1 = 5; short data2= 6; int data3 = 7; printf(“%d %d %d”, data1, data2, data3); // 5 6 7 출력 scanf(“%d %d %d”, &data, &data2, data3; // 실행 시 data1, data2의 자료 타입이 달라 오류 발생
예시) scanf 함수를 사용하여 나이 입력 받기
#include <stdio.h> void main() { int num = 0; while(1) { printf(“input age :”); scanf(“%d”, &num); if(num > 0 && num <= 130) break; else printf(“Incorrect Age! \n”); } printf(“your age: %d \n”,num); }
위 예제에서 scanf 함수를 사용할 때 잘못된 사용자 입력 처리하기
사용자가 실수로 “abc”라고 입력하면 Incorrect Age!라는 메시지가 무한 반복됨
형식을 지정하는 키워드와 사용자가 입력한 형식이 맞지 않아 문제 발생
#include <stdio.h> void main() { int num = 0; while(1) // 정상적인 나이를 입력할 때까지 무한 반복 { printf(“input age :”); // scanf 함수는 실행에 실패하면 0을 반환 if(scanf(“%d”, &num) == 0) { rewind(stdin); // 입력 버퍼를 모두 비움 printf(“[Enter] digit number! \n”); } else { if(num > 0 && num <= 130) break; else printf(“Incorrect Age! \n”); } } printf(“your age: %d \n”,num); }
반응형'C' 카테고리의 다른 글
배열과 포인터 표기법 (0) 2022.05.22 문자열을 정수로 변환 (0) 2022.05.20 표준 입력 함수 (0) 2022.05.19