Language/C

[ C ] [scanf() 라이브러리 ] 표준입력하기

곽수진 2021. 9. 13. 18:18
반응형

scanf()

표준입력(키보드)로부터 입력받은 자료값을 변수에 저장

→ 주로 숫자 데이터를 키보드로 입력받는데 사용됨

 

- 형식 문자열변수 이름을 지정
- 변수 이름 앞에는 & 써줌(주소에 접근)

 

scanf("서식문자", &변수명);

 

Ex)

scanf("%d", &num);
scanf("%d %f %f", &age, &height, &weight);

 

 

서식 문자

- 서식은 데이터 종류에 따라 달라짐

정수 : %d
실수(float) : %f
실수(double) : %lf

 

- 서식문자외에 다른 내용은 쓰지 않음

  → %c 문자 입력 : 공백 또는 엔터(Enter)도 문자로 인식

 

 

Ex)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {

    char m;
    printf("문자입력 ");
    scanf("%c", &m);

    printf("%d\n", m);

    return 0;
}

 

출력 결과 모습

▶ 사용자에게 지정서식자 %c를 통해 문자를 입력받았지만 %d로 출력 → 문자의 아스키코드 값을 출력

 

 

Ex 2)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {

    char m, n;
    printf("문자입력 ");
    scanf("%c%c", &m, &n);

    printf("%d %d\n", m, n);

    return 0;
}

 

작은 수를 입력받고자 char 활용

→ 숫자 1 입력 후 다음 숫자를 입력하기 위해 enter를 치면 결과값이 출력됨

→ 뒤에 출력되는 10 : enter값(enter를 문자로 인식해서 발생하는 오류)

→ scanf 코드에서 지정 서식자 사이에 띄어쓰기를 해두면 오류 해결

 

 

★ 오류 해결 ★

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {

    char m, n;
    printf("문자입력 ");
    scanf("%c %c", &m, &n);

    printf("%d %d\n", m, n);

    return 0;
}

 

결과값 출력 모습

 

결과값 출력 모습

→ 두 숫자를 띄어쓰기로 구분해도 상관 없음

 

 


 

 

Ex 3)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {

    unsigned x;
    scanf("%u", &x);
    printf("unsigned형: %u\n", x);

    return 0;
}

 

결과값 출력 모습

▶ int는 2147483647까지만 출력할 수 있음

unsigned (int) : 양수값만 출력하기 때문에 범위가 0 ~ 4,294,967,294로 바뀜

unsigned에 맞도록 지정서식자를 %d가 아닌 %u 사용

 

 

scanf 오류(함수의 안전성 문제)

Visual Studio 2019에서 scanf함수 사용시 컴파일 에러가 발생함

→ C11에서는 scanf_s를 대신 사용하도록 함

 

오류 발생 모습

 

헤더파일 수정으로도 해결 가능

#define _CRT_SECURE_NO_WARNINGS

or

#pragma warning(disable:4996)
반응형

'Language > C' 카테고리의 다른 글

[ C ] 상수(Constant)  (0) 2021.09.13
[ C ] [ scanf() 연습 문제 ] 입력 받은 숫자 연산 프로그램  (0) 2021.09.13
[ C ] 문자의 2진 표현  (0) 2021.09.13
[ C ] sizeof 연산자  (0) 2021.09.13
[ C ] 데이터형  (0) 2021.09.13