c로 주소록 짜기인데..

buleless의 이미지

파일을 불러와서 이름 나이 성별로 검색하여 출력하는 것 인데요 ;
전체출력만 되네요...
좀 도와주세요..
검색을 하니까 전화번호부가 저장되어있지 않다고 그러네요..ㅠ

#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);
}
flyingykk의 이미지

load() 함수의 while 루프에서 fscanf() 성공할 때마다 전역 변수 top을 증가시켜야할 것 같습니다.

lifthrasiir의 이미지

buleless wrote:
		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);
		}

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");
         }

- 토끼군

덤: 확인 안 해서 코드가 오류 날 수도 있습니다. 물론 그 정도는 직접 고치는 센스 :)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.