scanf

Jaemyeong Lee·2024년 7월 31일
0

FastCampusC++

목록 보기
7/78

scanf 함수 개요

scanf 함수는 표준 입력으로부터 형식화된 데이터를 읽습니다. 첫 번째 인자로 형식 문자열을 받고, 그 뒤로 읽어온 데이터를 저장할 변수의 주소를 인자로 받습니다.

형식 지정자 (Format Specifier)

형식 지정자는 scanf 함수가 입력 데이터를 읽을 때 사용할 형식을 지정합니다. 주요 형식 지정자는 다음과 같습니다:

형식 지정자설명
%d부호 있는 10진수 정수
%u부호 없는 10진수 정수
%o8진수 정수
%x16진수 정수
%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);
    }
}

주요 개념 설명

  1. 정수 입력:

    int num = 0;
    scanf("%d", &num);
    printf("%d\n", num);
    • %d를 사용하여 정수형 값을 입력받습니다.
    • 변수의 주소를 전달해야 하므로 &num을 사용합니다.
  2. 문자 입력:

    int num;
    char ch;
    int n = scanf("%d %c", &num, &ch);
    printf("%d\n", n);
    • %d%c를 사용하여 정수와 문자를 입력받습니다.
    • scanf는 성공적으로 읽은 변수의 개수를 반환합니다.
  3. 조건부 출력:

    int num;
    if (scanf("%d", &num)) // 제대로 입력 받은 경우 1이 반환되고 1은 true 형변환이 된다.
        printf("%d\n", num);
    • scanf가 입력을 성공적으로 받으면 1을 반환합니다.
    • 이를 이용해 조건부로 출력할 수 있습니다.
  4. 형식화된 입력:

    int num0, num1, num2;
    scanf("%d + %d = %d", &num0, &num1, &num2);
    printf("%d + %d = %d\n", num0, num1, num2);
    • 형식화된 문자열을 사용하여 특정 형식의 입력을 받을 수 있습니다.
  5. 접미사를 사용한 입력:

    int num;
    scanf("%i", &num);
    printf("%i\n", num);
    • %i를 사용하여 10진수, 8진수, 16진수를 자동으로 인식하여 입력받을 수 있습니다.
  6. 문자 입력:

    char ch;
    scanf("%c", &ch);
    printf("%c\n", ch);
    printf("%d\n", ch);
    • %c를 사용하여 문자를 입력받고, 해당 문자의 ASCII 값을 출력할 수 있습니다.
  7. 부동소수점 입력:

    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. 8진수 입력:

    int num;
    scanf("%o", &num);
    printf("%d\n", num);
    • %o를 사용하여 8진수 정수를 입력받습니다.
  9. scanf 오류 처리:

    char ch;
    scanf("%c", &ch);
    printf("1, %c\n", ch);
    
    while (getchar() != '\n');
    
    scanf("%c", &ch);
    printf("2, %c\n", ch);
    • 잘못된 입력을 처리하기 위해 getchar()를 사용하여 입력 버퍼를 비울 수 있습니다.
  10. 파일로부터 입력받기:

    int num;
    freopen("input.txt", "r", stdin);
    scanf("%d", &num);
    printf("%d\n", num);
    • freopen을 사용하여 표준 입력을 파일로 리디렉션할 수 있습니다.

주요 형식 지정자 요약 표

형식 지정자설명
%d부호 있는 10진수 정수
%u부호 없는 10진수 정수
%o8진수 정수
%x16진수 정수
%c문자
%s문자열
%f부동소수점 (float)
%lf부동소수점 (double)
%p포인터
%i부호 있는 정수 (10, 8, 16진수 자동 인식)
profile
李家네_공부방

0개의 댓글