c로 주소록 짜기인데..
글쓴이: buleless / 작성시간: 토, 2005/06/11 - 12:38오전
파일을 불러와서 이름 나이 성별로 검색하여 출력하는 것 인데요 ;
전체출력만 되네요...
좀 도와주세요..
검색을 하니까 전화번호부가 저장되어있지 않다고 그러네요..ㅠ
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> typedef struct address { char name[10]; int age[10]; char add[50]; char tel[20]; char sex[10]; }TEL; TEL book[100]; int top=0; void name(); void sex(); void end(); void select(); void load(); void main() { int no; while(1) { system("cls"); puts("┏━*메뉴*━┓"); puts("┃ 1.이 름 ┃"); puts("┃ 2.성 별 ┃"); puts("┃ 3.출 력 ┃"); puts("┃ 4.종 료 ┃"); puts("┗━━━━━┛"); printf("\n 선 택[ ] \b\b\b"); scanf("%d",&no); fflush(stdin); switch(no) { case 1 : { name(); break; } case 2 : { sex(); break; } case 3 : { load(); break; } case 4 : { end(); break; } } printf("아무키나 누르세요*^___^*\n"); getch(); } } void load() { char name[10], add[50], tel[10], sex[10]; int age[10]; FILE *fp1; if((fp1=fopen("input.txt","r")) !=NULL) { while((fscanf(fp1,"%7s %d %19s %13s %2s", &name, &age, &add, &tel,&sex)) !=EOF) { printf("%s %d %s %s %s\n", name,age,add,tel,sex); } } else { printf("input 파일이 없습니다.\n"); } fclose(fp1); } void name() { char copyname[15]; int i; if(top == 0) { printf("전화번호부가 저장되어있지 않아 검색할 수 없습니다..\n"); return; } printf("검색할 이름를 입력하세요 : "); gets(copyname); for(i=0;i<top;i++) { if(strcmp(book[i].name, copyname)==0) { printf("찾는 문자열이 없습니다..\n"); } if(strcmp(book[i].name, copyname)==0) { printf("%s %d %s %s %s\n",book[i].name,book[i].age,book[i].add,book[i].tel,book[i].sex); return; } } } void sex() { char sex[10]; int i; printf("\n성별을 입력하기(남/여): "); gets(sex); for(i=0; i<=top; i++) { if(!strcmp(book[i].sex, sex)) { printf("%s %d %s %s %s\n", book[i].name,book[i].age,book[i].add,book[i].tel,book[i].sex); } } } void end() { printf("\n\n\t사용해주셔서 감사합니다.^-^*\n\n\n"); exit(1); }
Forums:
load() 함수의 while 루프에서 fscanf() 성공할 때마다 전
load() 함수의 while 루프에서 fscanf() 성공할 때마다 전역 변수 top을 증가시켜야할 것 같습니다.
Re: c로 주소록 짜기인데..
load() 함수인데 왜 출력을 하나요? -.- 아무래도 이 함수를 다음과 같이 바꿔야 하지 않을까 싶습니다.
그리고 name() 함수에서 book[i].name과 copyname을 비교하는 과정이 두 번 들어 있습니다. 그대로 하면 찾는 문자열이 없다-_-고 나온 후에 결과가 나오겠지요. 아래 코드를 지우고 for 문 바깥쪽(즉 name 함수 맨 끄트머리)에 그냥 printf 문을 넣으면 될 것 같습니다.
- 토끼군
덤: 확인 안 해서 코드가 오류 날 수도 있습니다. 물론 그 정도는 직접 고치는 센스 :)
댓글 달기