-
반응형
- 표준 입력 함수 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
