fgets와 gets의 차이점??
글쓴이: ch0nn0m / 작성시간: 화, 2009/07/28 - 5:32오후
아래 소스를 보시면 진하게 표시된 fgets부분을 gets로 고치게 되면 remove함수가 제대로 실행이 됩니다
근데 왜 fgets로 하게 되면 잘 안되었을까요?? -_-a
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct data { char name[20]; char number[20]; struct data *next; }phone; phone *head, *tail; void init(void) { head=(phone*)malloc(sizeof(phone)); tail=(phone*)malloc(sizeof(phone)); head->next=tail; tail->next=tail; } void insert() { phone *t; t=(phone*)malloc(sizeof(phone)); printf("Input name: "); scanf("%s",t->name); fflush(stdin); printf("Input Tel Number: "); scanf("%s",t->number); fflush(stdin); printf("-------> Data Inserted\n"); t->next=head->next; head->next=t; } int remove(char *s) { phone *t,*p; p=head; t=p->next; while(strcmp(s,t->name) !=0 && t!= tail) { p=p->next; t=p->next; } if(t==tail) return 0; p->next=t->next; free(t); return 1; } void print() { phone *p; p=head->next; while(p!=tail) { printf("%s\t%s\n", p->name,p->number); p=p->next; } } int main(int argc,char *argv[]) { init(); int a; char buf[20]; while(1) { printf("-----Menu-----\n"); printf(" 1. Insert\n"); printf(" 2. Remove\n"); printf(" 3. Search\n"); printf(" 4. Print All\n"); printf(" 5. Exit\n"); printf("Choose the item: "); scanf("%d",&a); getchar(); switch(a) { case 1: insert(); break; case 2: printf("삭제할 이름: "); <span>fgets(buf,20,stdin); //gets(buf)로 고치면 밑의 remove함수가 제대로 실행됨</span> remove(buf); break; case 4: print(); break; } } return 0; }
Forums:
man fgets 해서 보시면
man fgets 해서 보시면 fgets와 gets의 newline character를 처리하는게 다르다는 설명을 보실 수 있습니다.
저장한 data는 newline character가 없어서 생기는 문제 같군요.
==========================================================================
오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.
오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.
윗분 말씀대로 fgets로
윗분 말씀대로 fgets로 얻은 데이터에서 new line character를 제거하는 부분을 추가하고 사용하시기 바랍니다.
gets는 사용하지 마세요. 자세한 내용은 man page에 나옵니다~
댓글 달기