개인 자료란 (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/308/815/003/262x150.crop.jpg?20240617084353

레드스톤

[피아노커버] 디스코드 - QWER

노트블럭전문가

2024-06-17

0

/files/thumbnails/932/812/003/262x150.crop.jpg?20240616121638

업데이트

마인크래프트 1.21 정식 업데이트

학교가기싫다

2024-06-14

1

/files/thumbnails/308/805/003/262x150.crop.jpg?20240605201646

레드스톤

[노트블럭 커버] 팬서비스/mona 【 HoneyWorks 】

노트블럭전문가

2024-06-05

0

/files/thumbnails/288/791/003/262x150.crop.jpg?20240602150002

아티클

《까다로운 시련》 업데이트 날짜 공개 및 정보

학교가기싫다

2024-06-02

0

/files/thumbnails/841/773/003/262x150.crop.jpg?20240526120908

레드스톤

마인크래프트 노트블록버전 『 봄을 고하다 (春を告げる) 』 [더블옥타브 버전]

노트블럭전문가

2024-05-26

0