개인 자료란 (JE)

  서버 커뮤니티

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

질문하기 C

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

2020.01.30 조회 수 230 추천 수 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

넵 감사합니다

뉴스 및 창작물
/files/thumbnails/268/789/003/262x150.crop.jpg?20240515192032

레드스톤

벌레먹은 돌 빠르게 제거하는 법

GlassesFilm

2024-05-15

0

/files/thumbnails/797/788/003/262x150.crop.jpg?20240515090924

건축

마인크래프트로 구현한 카르카손 보드게임

Warak

2024-05-15

1

/files/thumbnails/487/784/003/262x150.crop.jpg?20240508233607

모드

Windows Borderless 모드에서 악성코드 발견 2

학교가기싫다

2024-05-08

1

/files/thumbnails/384/778/003/262x150.crop.jpg?20240512002324

업데이트

마인크래프트 자바 에디션 스냅샷 24w18a

학교가기싫다

2024-05-06

0

/files/thumbnails/855/781/003/262x150.crop.jpg?20240505141129

레드스톤

레이저 클리너

GlassesFilm

2024-05-05

1