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"); }- 토끼군
덤: 확인 안 해서 코드가 오류 날 수도 있습니다. 물론 그 정도는 직접 고치는 센스 :)
댓글 달기