간단한 구조체 소스를 리눅스와 윈도우에서 결과가 다른이유가 뭔가요?

ch0nn0m의 이미지

구조체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);
        }
}
mirheekl의 이미지

아마도 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?

--

klara의 이미지

fflush(stdin)은 표준이 아닙니다.
윈도우에서 잘되는건, 아마 윈도우에서는 fflush(stdin) 를 확장으로 지원하는 VC++을 이용하셨기 때문일듯합니다.
fflush(stdin)로 한번 찾아보시면 많은 글을 읽어보실수 있습니다.