간단한 구조체 소스를 리눅스와 윈도우에서 결과가 다른이유가 뭔가요?
글쓴이: ch0nn0m / 작성시간: 목, 2009/07/23 - 5:12오후
구조체3개를 입력받고 다시 출력하는 소스인데요..
윈도우에선 아무문제가 없습니다..
하지만 리눅스에서 실행하면 결과가...
[haha@localhost tmp]$./test
먼저입력하시오
저자: a
제목: a
페이지수: 200
저자:제목:
2번째입력할땐 저자를 뛰어넘어버리네요
#include<stdio.h> struct data { char name[20]; char title[40]; int page; }; int main() { struct data book[3]; int i; printf("먼저입력하시오\n"); for(i=0; i<3; i++) { fputs("저자: ",stdout); fgets(book[i].name,sizeof(book[i].name),stdin); fflush(stdin); fputs("제목: ",stdout); fgets(book[i].title,sizeof(book[i].title),stdin); fflush(stdin); printf("페이지수: "); scanf("%d", &book[i].page); fflush(stdin); } printf("\n"); printf("출력하겠음\n"); for(i=0; i<3; i++) { printf("저자: %s\n",book[i].name); printf("제목: %s\n",book[i].title); printf("페이지수: %d\n",book[i].page); } }
Forums:
scanf말고 fgets를 그대로 써보시면 어떨까 합니다.
아마도 scanf에서 입력된 엔터키가 다음번 fgets명령으로 들어갔을 겁니다.
fgets로 받아서 위에 두 건과 똑같이 처리하시면 되지않을까 합니다.
--
This is for you new people. I have just one rule :
Everyone fights, no one quits. If you don't do your job, I'll shoot you myself. Do you get me?
--
비표준 코드를 이용하였기 떄문입니다.
fflush(stdin)은 표준이 아닙니다.
윈도우에서 잘되는건, 아마 윈도우에서는 fflush(stdin) 를 확장으로 지원하는 VC++을 이용하셨기 때문일듯합니다.
fflush(stdin)로 한번 찾아보시면 많은 글을 읽어보실수 있습니다.
댓글 달기