배고픈상어-효묘
대표칭호 없음
이해도 | 기타 |
---|
이거 문제 맞았나? 가 두 번씩 출력되는데 왜그런지좀 알려주세요,..
디버그 모드로하니까 쓰레기값이 들어가던데 왜그런질 모르겠네요ㅠ
#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);
}
0xIII
2020.01.31gcc 컴파일러에선 문제가 발생하지 않으나 VS에서 질문자님과 같은 오류가 발생하네요.
printf("문제 개수 입력 : ");
scanf("%d",&num);
23행 ~ 25행 구문에서 사용자 입력을 받으면서 컴파일러가 자동적으로 처리해주지 않아 입력 버퍼에 쓰레기 값이 남아있는 것으로 보입니다.
fflush(stdin); -> rewind(stdin);
33행을 rewind(stdin);으로 수정하니 정상적으로 하나만 출력되네요.
배고픈상어-효묘
2020.01.31감사합니다!
illusion_xii
2020.01.310xIII님이 이미 답하셧으니 추가적인 조언을 드리겠습니다.
scanf 는 현재 버퍼오버플로우에 굉장히 취약합니다. 따라서 현재 그러한 취약점을 보완한 scanf_s 라는 똑같은기능을 하는 구문이있으니, 되도록이면 scanf는 기피하시는것을 추천드립니다.
배고픈상어-효묘
2020.01.31넵 감사합니다