간단한 구조체 소스를 리눅스와 윈도우에서 결과가 다른이유가 뭔가요?
글쓴이: 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)로 한번 찾아보시면 많은 글을 읽어보실수 있습니다.
댓글 달기