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() 함수인데 왜 출력을 하나요? -.- 아무래도 이 함수를 다음과 같이 바꿔야 하지 않을까 싶습니다.
void load() { FILE *fp; int result; top = 0; /* 레코드 갯수 초기화 (이건 파일을 열든 안 열든 똑같죠) */ fp = fopen("input.txt", "r"); if(fp != NULL) { while(1) { result = fscanf(fp, "%7s %d %19s %13s %2s", book[top].name, &book[top].age, book[top].add, book[top].tel, book[top].sex); if(result == EOF) break; top++; } } else { printf("input 파일이 없습니다.\n"); } fclose(fp); }그리고 name() 함수에서 book[i].name과 copyname을 비교하는 과정이 두 번 들어 있습니다. 그대로 하면 찾는 문자열이 없다-_-고 나온 후에 결과가 나오겠지요. 아래 코드를 지우고 for 문 바깥쪽(즉 name 함수 맨 끄트머리)에 그냥 printf 문을 넣으면 될 것 같습니다.
if(strcmp(book[i].name, copyname)==0) { printf("찾는 문자열이 없습니다..\n"); }- 토끼군
덤: 확인 안 해서 코드가 오류 날 수도 있습니다. 물론 그 정도는 직접 고치는 센스 :)
댓글 달기