개인 자료란 (JE)

  서버 커뮤니티

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

질문하기 C

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

2020.01.30 조회 수 229 추천 수 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/762/770/003/262x150.crop.jpg?20240418073724

레드스톤

T.B.H (고민중독) | 노트블럭 버전 | NoteBlock Cover [한국어 영어 중국어 가사 추가]

노트블럭전문가

2024-04-18

0

/files/thumbnails/218/767/003/262x150.crop.jpg?20240412130213

레드스톤

우리의 꿈 - 원피스 오프닝

노트블럭전문가

2024-04-12

0

/files/thumbnails/505/766/003/262x150.crop.jpg?20240411122306

레드스톤

기동전사 건담 수성의 마녀 | 노트블럭 커버 1

노트블럭전문가

2024-04-11

1

/files/thumbnails/932/765/003/262x150.crop.jpg?20240410124459

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

노트블럭전문가

2024-04-10

0

/files/thumbnails/403/765/003/262x150.crop.jpg?20240409190538

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

Sonttukk

2024-04-09

4