개인 자료란 (JE)

  서버 커뮤니티

Profile 배고픈상어-효묘 대표칭호 없음
Profile

질문하기 C

c언어 scanf..질문입니다..

2020.01.30 조회 수 273 추천 수 1
이해도 기타 

이거 문제 맞았나? 가 두 번씩 출력되는데 왜그런지좀 알려주세요,..

디버그 모드로하니까 쓰레기값이 들어가던데 왜그런질 모르겠네요ㅠ


#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main()

{

    int cc = 1;

    char name[20] = { 0 };

    int score=0, num=6, i;

    char c;

    printf("이름을 입력 : ");

    scanf("%s",name);

    

    printf("문제 개수 입력 : ");

    scanf("%d",&num);

    for (i = 0; i < num; i++) {

        printf("문제 맞았나?(y/n)");

        fflush(stdin);

        scanf_s("%c",&c);

        if (c == 'y') {

            score++;

        }

        c = 0;

    }

    printf("%s학생, %d/%d문제 맞음",name, score, num);

}




4개의 댓글

0xIII
2020.01.31

gcc 컴파일러에선 문제가 발생하지 않으나 VS에서 질문자님과 같은 오류가 발생하네요.

 

printf("문제 개수 입력 : ");

scanf("%d",&num);

 

23행 ~ 25행 구문에서 사용자 입력을 받으면서 컴파일러가 자동적으로 처리해주지 않아 입력 버퍼에 쓰레기 값이 남아있는 것으로 보입니다.

 

fflush(stdin); -> rewind(stdin);

 

33행을 rewind(stdin);으로 수정하니 정상적으로 하나만 출력되네요.

@0xIII

감사합니다!

illusion_xii
2020.01.31

0xIII님이 이미 답하셧으니 추가적인 조언을 드리겠습니다.

scanf 는 현재 버퍼오버플로우에 굉장히 취약합니다. 따라서 현재 그러한 취약점을 보완한 scanf_s 라는 똑같은기능을 하는 구문이있으니, 되도록이면 scanf는 기피하시는것을 추천드립니다.

@illusion_xii

넵 감사합니다