C_C++/C_라이브러리_함수

(C언어) scanf: 표준 입력 스트림에서 형식이 지정된 데이터를 읽는다

고니자니 2023. 2. 27. 12:54
반응형
#include <stdio.h>
int scanf(const char *format [, argument]...);

scanf 함수는 표준 입력 스트림(stdin)에서 형식이 지정된 데이터를 읽습니다.

성공적으로 변환되고 할당된 필드 수를 반환합니다. 값을 읽었으나 할당되지 않은 필드는 포함되지 않습니다. 반환값이 0이면 할당된 필드가 없음을 나타냅니다.

argument는 format의 형식 지정자에 해당되는 변수에 대한 포인터입니다.

 

format 문자열

format은 입력 필드들을 스캐닝, 변환, 저장시키는 방법을 알려줍니다. 포맷을 위한 address 인수는 주어진 포맷 지정자 만큼 있어야 하며, 그렇기 않은 경우에는 예상치 못한 결과를 초래할 수 있으며 더 많은 address 인수는 무시됩니다.

예상되는 패턴과 다르게 사용된 scanf 함수는 예상치 못한 결과를 초래합니다.

 

예제 1

int와 double 형식의 데이터를 입력 받는 예제입니다.

#define _CRT_SECURE_NO_WARNINGS  // Visual Studio
#include <stdio.h>
int main()
{
    int a;
    double b;
    int n = scanf("%d %lf", &a, &b);
    printf("%d %d %g\n", n, a, b);
    
    return 0;
}

scanf: int, double 형식 입력 받기

 

예제 2

다음 예제는 10진수, 8진수, 16진수를 입력 받는 예제입니다.

#define _CRT_SECURE_NO_WARNINGS  // Visual Studio
#include <stdio.h>
int main()
{
    int a, b, c;
    scanf("%d %o %x", &a, &b, &c);
    printf("%d %d %d\n", a, b, c);
    
    return 0;
}

scanf: 10진수, 8진수, 16진수 입력 받기

 

예제 3

다음 예제는 한 문자와 문자열을 입력 받는 예제입니다.

#define _CRT_SECURE_NO_WARNINGS  // Visual Studio
#include <stdio.h>
int main()
{
    char c;
    char s[100];
    scanf("%c %s", &c, s);   // %s: 배열명은 배열의 시작 주소이므로 & 문자 생략
    printf("%c %s\n", c, s);
    
    return 0;
}

scanf: 한 문자와 문자열 입력 받기

 

예제 4

scanf 함수로 문자열을 입력 받을 때, 기본으로 공백 뒤쪽은 입력을 받지 못합니다.

#define _CRT_SECURE_NO_WARNINGS  // Visual Studio
#include <stdio.h>
int main()
{
    char s[100];
    scanf("%s", s);
    printf("%s\n", s);
    
    return 0;
}

scanf: %s는 공백 뒤쪽을 입력 받지 못함

 

예제 5: 공백 포함해서 한 줄 전체 입력 받기

다음 예제는 공백을 포함해서 한 줄 전체를 입력받는 방법입니다.

#define _CRT_SECURE_NO_WARNINGS  // Visual Studio
#include <stdio.h>
int main()
{
    char s[100];
    scanf("%[^\n]s", s);  // 공백 포함해서 한 줄 전체 입력 받기
    printf("%s\n", s);
    
    return 0;
}

scanf: 공백을 포함해서 한 줄 전체 입력 받기

 

예제 6

다음 예제는 문자수를 제한해서 입력 받는 예제입니다.

#define _CRT_SECURE_NO_WARNINGS  // Visual Studio
#include <stdio.h>
int main()
{
    char c, s[100];
    scanf("%c%5s", &c, s);  // 5문자만 잘라서 입력 받기
    printf("%c %s\n", c, s);
    
    return 0;
}

scanf: 문자수를 제한해서 입력 받기

 

 

728x90
반응형