while 문에서 엔터키 누르면 break하는 코딩인데 엔터눌러도 안되네요...

익명 사용자의 이미지

#include
#include
void main(void) {
char name[20];
int num, kor, eng, math, science;

FILE* fp;
fp = fopen("test.txt", "w");

while (1) {
printf("성명을 입력하세요(끝내려면 엔터키를 입력하세요):");
scanf("%s", name);
if (name == '\n')
break;
fprintf(fp, "%s\n", name);
printf("학번, 국어, 영어, 수학, 과학 순으로 입력하세요:");
scanf("%d %d %d %d %d",&num,&kor,&eng,&math,&science );
fprintf(fp, "%d %d %d %d %d", kor, eng, math, science);
}
fclose(fp);
}

세벌의 이미지

c 프로그램 배우면 printf 다음으로 배우는 함수가 scanf 일텐데 미묘하고 어려운 문제가 있네요.
버퍼 관련 문제인데요.
https://stackoverflow.com/questions/7898215/how-to-clear-input-buffer-in-c
참고하시면 도움 되실 듯.

kldp에서 소스코드는 code 태그 안에 써야 제대로 보입니다.

익명 사용자의 이미지

간단합니다.

"%s"를 이용하여 scanf으로 입력받은 name에는 결코 개행문자가 남아있을 수 없기 때문입니다.

scanf"%s"를 지정했을 경우, scanf는 공백이 아닌 문자를 발견할 때까지 모든 문자를 무시해 버립니다.

이 문제는 성명을 입력받을 때 gets 혹은 fgets 함수를 사용하면 일단은 조치가 가능합니다만, 그렇게 한다고 문제가 완전히 해결되는 것도 아니지요.

글쎄요. 일단은 "어떤 형태의 입력을 가정하는지", 그리고 "사용자가 의도와 다르게 입력할 경우 어떻게 조치할 것인지"를 깊게 생각해보는 게 좋겠습니다. 사용자 입력 처리는 만만한 일이 아니지요.