저기 죄송한데 질문하나만 할께요;;; 디버그까지는 잘되다가 리다이렉션을 이용하니까 안되네요 왜이런가요???
코드는 아래부터이고요;;
#include
#include
#include
#include
#define MAX 20
struct node{
char number[MAX];
char name[MAX];
char phone[MAX];
char mail[MAX];
struct node *ptr;
};
struct node *head, *tail;
void initnode(){
head=(struct node*)malloc(sizeof(struct node));
tail=(struct node*)malloc(sizeof(struct node));
head->ptr = tail;
}
void addnode(char number[],char name[],char phone[], char mail[]){
struct node *newnode, *temp;
int i;
newnode=(struct node*)malloc(sizeof(struct node));
for(i=0;i
newnode->number[i] = number[i];
};
newnode->number[i]='\0';
for(i=0;i
newnode->name[i] = name[i];
};
newnode->name[i]='\0';
for(i=0;i
newnode->phone[i] = phone[i];
};
newnode->phone[i]='\0';
for(i=0;i
newnode->mail[i] = mail[i];
};
newnode->mail[i]='\0';
temp = head;
while(temp->ptr!=tail){
temp=temp->ptr;
}
newnode->ptr=tail;
temp->ptr=newnode;
}
void printnode(){
struct node *now;
for(now=head->ptr;now!=tail;now=now->ptr){
fprintf(stdout,"%s\n",now->number);
fprintf(stdout,"%s\n",now->name);
fprintf(stdout,"%s\n",now->phone);
fprintf(stdout,"%s\n",now->mail);
}
}
void erasenode(char dell[]){
struct node *del, *temp;
temp=head;
while(temp!=tail){
del=temp->ptr;
if(strcmp(del->number,dell)==0){
temp->ptr=del->ptr;
free(del);
}
temp=temp->ptr;
}
}
int findnode(char search[]){
int j=0;
struct node *now;
for(now=head->ptr;now!=tail->ptr;now=now->ptr){
if(strcmp(now->number,search)==0){
fprintf(stdout,"[검색 결과\n");
fprintf(stdout,"%s\n",now->number);
fprintf(stdout,"%s\n",now->name);
fprintf(stdout,"%s\n",now->phone);
fprintf(stdout,"%s\n",now->mail);
return 0;
}
};
return fprintf(stdout,"찾으시는 자료가 없습니다.\n");
}
int findnode2(char search[]){
int j=0;
struct node *now;
for(now=head->ptr;now!=tail->ptr;now=now->ptr){
if(strcmp(now->name,search)==0){
fprintf(stdout,"[검색 결과]\n");
fprintf(stdout,"%s\n",now->number);
fprintf(stdout,"%s\n",now->name);
fprintf(stdout,"%s\n",now->phone);
fprintf(stdout,"%s\n",now->mail);
return 0;
}
}
return fprintf(stdout,"찾으시는 자료가 없습니다.\n");
}
int main(){
int ch=0;
int ch2=0;
char number[MAX];
char name[MAX];
char phone[MAX];
char mail[MAX];
char search[MAX];
char del[MAX];
initnode();
while(ch!=5){
fprintf(stderr,"########################################\n");
fprintf(stderr,"### 번호를 선택하세요. ###\n");
fprintf(stderr,"### 1. Inesrt data ###\n");
fprintf(stderr,"### 2. Print Data ###\n");
fprintf(stderr,"### 3. Search Data ###\n");
fprintf(stderr,"### 4. Delete Data by ID ###\n");
fprintf(stderr,"### 5. Quit ###\n");
fprintf(stderr,"########################################\n");
fprintf(stderr,"번호를 입력하세요");
scanf("%d",&ch);
fflush(stdin);
switch(ch){
case 1:
fprintf(stderr,"학번:");
fgets(number,MAX,stdin);
*(number+(strlen(number)-1))='\0';
fprintf(stderr,"이 름:");
fgets(name,MAX,stdin);
fflush(stdin);
*(name+(strlen(name)-1))='\0';
fprintf(stderr,"전화번호:");
fgets(phone,MAX,stdin);
fflush(stdin);
*(phone+(strlen(phone)-1))='\0';
fprintf(stderr,"이메일:");
fgets(mail,MAX,stdin);
fflush(stdin);
*(mail+(strlen(mail)-1))='\0';
fprintf(stderr,"\n");
addnode(number,name,phone,mail);
break;
case 2:
fprintf(stdout,"[신상 정보 출력]\n");
printnode();
break;
case 3:
fprintf(stderr,"########################################\n");
fprintf(stderr,"1. by ID\n");
fprintf(stderr,"2. by name\n");
fprintf(stderr,"3. Cancel\n");
fprintf(stderr,"검색 방법을 선택하세요:");
scanf("%d",&ch2);
switch(ch2){
case 1:
fprintf(stderr,"찾을 데이터 입력:");
fflush(stdin);
fgets(search,MAX,stdin);
*(search+(strlen(search)-1))='\0';
findnode(search);
break;
case 2:
fprintf(stderr,"찾을 데이터 입력:");
fflush(stdin);
fgets(search,MAX,stdin);
*(search+(strlen(search)-1))='\0';
findnode2(search);
break;
case 3:
break;
}
break;
case 4:
printf("삭제할 데이터 입력:");
fflush(stdin);
fgets(del,MAX,stdin);
*(del+(strlen(del)-1))='\0';
erasenode(del);
break;
default:
break;
};
};
return 0;
}
디버그 모드나 빌드 모드에서 잘돌아가는데 명령프롬프트에서 리다이렉션을 이용하니까 에러가 나버립니다.;;;;;
왜이런가요 고수님들 좀 가르쳐 주세요!!!
댓글 달기