fgets을 이용해서 문자열을 받을때 엔터의 처리?
글쓴이: hurryon / 작성시간: 금, 2003/01/24 - 1:31오전
리눅스에서...링크스 리스트로 주소록을 하나 만들고 있습니다. 문제는 공백 문자을 입력 받아야 하기 때문에
scanf을 사용하지 않고 fgets을 이용하고 있는데 이것을 이용하니 '엔터' 문자 때문에 고생하고 있습니다.
어디서 들은 봐로 fflush(stdin)을 이용해서 버퍼에 있는 내용을 비우라고 하시는데...제가 제대로 파악을 못했는지
안되네요.
음냐. 소스는 다음과 같습니다. 선배님들은 어떻게 해결을 하셨는지?
void add() /* 전화번호부 추가 함수 */ { listPtr temp; int number; char name[MAX_CHAR_0]; char telephone[MAX_CHAR_1]; char cellphone[MAX_CHAR_1]; char address[MAX_CHAR_2]; char email[MAX_CHAR_2]; char homepage[MAX_CHAR_2]; printf("\n-------------------------입력------------------------종료(!)\n"); for(;;) /* 포문을 무한으로 돌린다 */ { printf("이름: "); fgets(name, sizeof(name), stdin); fflush(stdin); if(name[0] == '!') break; else printf("전화번호: "); fgets(telephone, sizeof(telephone), stdin); fflush(stdin); printf("휴대번호: "); fgets(cellphone, sizeof(cellphone), stdin); fflush(stdin); printf("주소: "); fgets(address, sizeof(address), stdin); fflush(stdin); printf("이메일: "); fgets(email, sizeof(email), stdin); fflush(stdin); printf("홈페이지: "); fgets(homepage, sizeof(homepage), stdin); scanf("%s", homepage); fflush(stdin); temp = (listPtr)malloc(sizeof(node)); if(IS_FULL(temp)) { printf("Error! Full!\n"); return; } strcpy(temp->name, name); strcpy(temp->telephone, telephone); strcpy(temp->cellphone, cellphone); strcpy(temp->address, address); strcpy(temp->email, email); strcpy(temp->homepage, homepage); temp->link = phonebook; phonebook = temp; } }
음냐. 보니까...엔터까지도 같이 들어 가는거
같습니다. 엔터을 제거 하고 넣어야 할거 같은데..
잘 안되네요.
예을 들어서...
#include <stdio.h> main() { char name[10]; char address[30]; int i = 0; fgets(name, sizeof(name), stdin); for(i = 0; i < 10; i++) { fprintf(stdout, "%c", name[i]); } }
하고 실행하면 문자가 하나 들어 가더군요.
hurryon
hurryon
?root@note work]#
저걸 어떻게 찾아서 없셀수 있을까요? 아니면
다른 함수로 받아야 하나요?
Forums:
간단하겨 하려면....
말 그대로 엔터를 없애면 되겠죠.
\n -> \0 으로 변환해 주면 간단한 해결책이 될 듯 합니다.
뭐 대충 방법을 보이자면...
굳이 fflush가 필요하지는 않을 듯 싶습니다.
Consider the ravens: for they neither sow nor reap; which neither have storehouse nor barn; and God feedeth them: how much more are ye better than the fowls?
Luke 12:24
my_gets: gets alternative
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
전 아래의 매크로를 사용하고 있습니다.사용법은 TRIM(문자열)
전 아래의 매크로를 사용하고 있습니다.
사용법은
TRIM(문자열)
혹은
TRIM_CRLF(문자열)
입니다.
댓글 달기