[C] 구조체의 char안에 gets가 왜 안 될까요?
글쓴이: kknd345 / 작성시간: 목, 2004/06/24 - 4:50오후
#include<stdio.h> #include<string.h> typedef struct schedule{ int startC; int startMin; int endC; int endMin; char contents[255]; }; schedule inputSchedule() { struct schedule exa; printf("일정의 시작시:시작분 이렇게 입력해주세요.\n"); scanf("%d:%d",&exa.startC,&exa.startMin); if( (exa.startC<10 || exa.startC>=18) || (exa.startMin<0 ||exa.startMin>=60)) { printf("입력오류입니다. 다시 입력해 주세요.\n"); exa.startC=0; return exa; } printf("일정의 끝나는시:끝나는분 이렇게 입력해주세요\n"); scanf("%d:%d",&exa.endC,&exa.endMin); if( (exa.endC<10 || exa.endC>18 ) || (exa.endMin<0 || exa.endMin>=60 )) { printf("입력오류입니다. 다시 입력해 주세요.\n"); exa.startC=0; return exa; } printf("일정의 내용을 입력해 주세요\n"); gets(exa.contents); return exa; } void main() { struct schedule iljung[100]; int i; for(i=0;i<100;i++) { iljung[i]=inputSchedule(); if(iljung[i].startC==0)/* 입력값에 오류가 있을때 필요한 코드 */ { /* */ i--; /* */ } printf("%s",iljung[i].contents); } }
컴파일 하니 문번적 오류는 없다는데
gets(exa.contents);
일정 입력이 안되네요...
그냥 바로 넘어가버리는데요..
scanf("%s",exa.contents) 했더니 스페이스바를 누르고 입력하니 에러 비슷하게 되길래...
gets를 써볼까하고 바꿧는데
이제 아예 입력을 안 받네요
Forums:
구조체 멤버라서 그런 것이 아니라
scanf랑 gets를 섞어 쓰시면 그렇게 됩니다. scanf하고 난 다음에 입력 버퍼에 \n이 남아 있거든요.
리디렉션이나 파이프로 입력받는 경우가 없다면,
gets 직전에 fflush(stdin)을 해주시면 문제가 해결됩니다.
리디렉션/파이프로 입력받을 때 fflush는 입력버퍼를 날려먹는 문제점이 있으므로, 아예 scanf를 쓰지 않고 gets+atoi 를 활용하시면 되겠습니다.
( 이왕이면 gets보다는 fgets( , , stdin) )
[url]http://bbs.kldp.org/viewtopic.php?t
http://bbs.kldp.org/viewtopic.php?t=25929&highlight=fflush%28stdin%29
C++, 그리고 C++....
죽어도 C++
scanf와 fgets를 혼용해서 쓰면 상관없나요?(fgets 는
scanf와 fgets를 혼용해서 쓰면 상관없나요?
(fgets 는 txt 파일에 남는건 알고 있는데... )
1%의 가능성이면 충분하다!
최선을 다하자!
atoi 로 10:00 둘을 따로 그러니깐 10 은 a
atoi 로
10:00
둘을 따로
그러니깐
10 은 a
00 b 에 대입이 가능한가요?
그리고 b=00 하면 컴파일 오류가 안 날까요?
1%의 가능성이면 충분하다!
최선을 다하자!
fgets와 sscanf를 쓰는 게 좋겠네요. 리턴값으로 에러가 있는지도
fgets와 sscanf를 쓰는 게 좋겠네요. 리턴값으로 에러가 있는지도 검사하세요.
이렇게 하고 10:00을 입력하면 a는 10, b는 0이 됩니다.
[quote="kknd345"]atoi 로 10:00 둘을 따
꼭 HH:MM 형식이라면
아니라면
간단히
급하게 한거라 참고용으로만 보시길.
그리고, man aoti
언제나 시작
Re: 구조체 멤버라서 그런 것이 아니라
ixevexi님이 관련 글을 포워딩 해주셨지만 클릭을 안해 보실 분들을 위해서 적습니다.
fflush(stdin)는 쓰면 안됩니다.
- 죠커's blog / HanIRC:#CN
댓글 달기