scanf를 사용시 오류

//
#include <stdio.h>

int main() {
FILE* fp;
fp = fopen(“scores.txt”, “w”);
if (fp == NULL) {
fprintf(stderr, “grade.txt 파일을 열 수 없습니다.\n”);
exit(1);
}
int number;
char name[10];
float score;
char ch;
do {
printf(“학번 : “);
scanf(”%d”, &number);
printf(“이름 : “);
scanf(”%s”, name);
printf(“성적 : “);
scanf(”%ff”, &score);
fprintf(fp, “%d %s %f”, number, name, score);
printf(“데이터 추가를 계속? (y/n) : “);
scanf(”%c”, &ch);
} while (ch != ‘n’);
fclose(fp);

return 0;

}


scanf를 사용하면 왜 이런오류가 발생하는 건가요?

변수 ch를 배열로 바꾸시고
while (ch != 'n')while (ch[0] != 'n') 로 바꿔보세요
아니면 y/n 입력받기 전에 getchar()로 버퍼 입력을 없애시는게…

바꿔도 똑같은 값이 출력 되요.

getchar() 넣어서 정리해보았읍니다
한글로 하니깐 VSCode에서는 깨져서 나오더라고요…;

#include <stdio.h>
#include <stdlib.h>

int main() {
    int number;
    char name[10];
    float score;
    char ch;
    FILE* fp;

    fp = fopen("scores.txt", "w");
    if (fp == NULL) {
        fprintf(stderr, "Can't open grade.txt file.\n");
        exit(1);
    }

    do {
        printf("Number : ");
        scanf("%d", &number);
        printf("Name : ");
        scanf("%s", name);
        printf("Score : ");
        scanf("%ff", &score);
        fprintf(fp, "%d %s %f", number, name, score);
        getchar();
        printf("Keep adding data? (y/n) : ");
        scanf("%c", &ch);
    } while (ch != 'n');
    
    fclose(fp);

    return 0;
}

궁금한게 왜 getchar ();를 사용하지 않으면 저렇게 출력이 비정상적으로 밀려서 되나요?

%c로 받으면 한칸한칸 받는데

y하고 엔터를 누르면
y,엔터 이렇게 버퍼에 들어옵니다.
scanf는 y값만 받고 엔터는 버퍼에 남아요 그래서 다음 scanf에서 엔터를 받아버리고 기대하지않은 결과가 나오는거고요

1 Like

그럼 저런 문제가 발생하는 경우가 반복문을 쓸때 말고 또 있을까요?

꼭 반복문이 아니라 그냥 scanf() 에서 %c 같은 걸로 문자 등을 입력받을 때 발생하는 걸로 알고 있읍니다

자세하게 알려주셔서 감사합니다.

1 Like

저도 질문자님이 예의있게 질문해주셔서 감사할 따름입니다
그래도 다음부터는 코드 질문글 작성법이나 코톡 사용법 등을 읽어보시고
코드를 깔끔하게 정리해서 더 정확히 질문해 주시면 감사하겠습니다 :smiley:

네!

오류가 뭔지 한글로 말을 안 해줘서 그냥 넘겼는데 야톡분들 너무 젠틀하시네여

2 Likes