일단 시작하는 IT개발 블로그
  • c언어 scanf 함수 주의점. 문자 하나를 받을 경우
    2022년 03월 06일 22시 32분 04초에 업로드 된 글입니다.
    작성자: sooooong_minseok
    double a = 0;
    double b = 0;
    char c;
    
    scanf("%lf", &a);
    scanf("%lf", &b);
    scanf(" %c", &c);
    
    printf("%.2lf\n", a);
    printf("%.2lf\n", b);
    printf("%c\n", c);

    위 함수를 자세히 보면

    scanf(" %c", &c);의 형태이다.

    %c앞에 공백이 있는 것을 볼 수 있다.

    이 점을 유의해야 한다.

     

    일반적인 자료형의 경우에는 이전에 입력된 엔터나 공백문자, 탭 등을 입력구분자로 처리하여 무시한다.

    그러나 문자형 자료char의 경우에는 모든 문자를 입력으로 처리한다.

     

    만약 공백을 생략하면 위에 b의 값을 입력받은 후 누른 엔터가 버퍼에 저장되어 있다가 위의 입력명령을 만나면 c에 저장되어 엉뚱한 결과가 출력될 수 있다.

    출처 - 혼자서도 쉽게 익힐 수 있는 자기 주도 c언어 프로그래밍.

     

    문자'열'을 출력할 때는 조금 다르다.

    문자열을 공간을 설정할 필요가 있다.

     

    double a = 0;
    double b = 0;
    char c[256];
    
    scanf("%lf", &a);
    scanf("%lf", &b);
    scanf_s("%s", &c, sizeof(c));
    
    printf("%.2lf\n", a);
    printf("%.2lf\n", b);
    printf("%s\n", c);

    문자열 [256] char의 크기를 적고,

    scanf함수에는 사이즈는 정해준다.

    scanf함수를 sdl검사해제나 _CRT_SECURE_NO_WARNINGS를 정의했다면 사이즈를 정할 필요는 없는 것 같다.(추측)

     

    위와 같은 표현에서는 공백을 굳이 넣을 필요가 없다.

     

     

     

     

    첫 번째 예제 공백을 넣어야 한다는 사실을 기억해두자.

    'error report' 카테고리의 다른 글

    저장 실패; 권한관련 이슈.  (0) 2023.12.19
    firebase deploy시 발생한 에러.  (0) 2023.10.17
    LNK1104, LNK1168  (0) 2022.03.06
    c언어 변수 이중 선언시 오류 발생.  (0) 2022.03.06
    git commit과 vim 실행법.  (0) 2022.02.27
    댓글