#include <stdlib.h>
#include <stdio.h>
#include "Extern.h"
#include "Structs.h"
int main(void)
{
Info *phones;
int InfoNumber = 0;
int SelectMenu = 0;
phones = (Info *)malloc(sizeof(Info));
phones[InfoNumber].aName[0] = NULL;
while(1) {
puts("*****전화번호부*****");
puts("1. 입력");
puts("2. 삭제");
puts("3. 검색");
puts("4. 전체 출력");
puts("5. 종료하기");
printf("선택하십시오 : ");
scanf("%d", &SelectMenu);
fflush(stdin); /////////////////////////////////////////////////
switch(SelectMenu) {
case 1:
InsertNumber(phones, &InfoNumber);
break;
case 2:
DeleteNumber(phones, InfoNumber);
break;
case 3:
SearchName(phones, InfoNumber);
break;
case 4:
PrintInfo(phones, InfoNumber);
break;
case 5:
puts("종료");
free(phones);
return;
} //end switch
} //end while
free(phones);
puts("함수 main이 정상적으로 종료되지 않았습니다.");
return;
}
이거 메인.
void InsertNumber(Info phones[], int *InfoNumber) // , InfoNumber = 0단위
{
int i = 0;
printf("0:0 %d", phones[0].aName[0]);
for(i = 0; i <= *InfoNumber; i++) {
if(phones[i].aName[0] == NULL) { //빈 파일에만 적용됨
puts("[입력]");
printf("이름 : ");
gets(phones[i].aName);
printf("전화번호 : ");
gets(phones[i].aNumber);
printf("\n");
//배열을 전부 다 채웠다면
if(i == *InfoNumber) {
(*InfoNumber)++;
phones = (Info *)realloc(phones, *InfoNumber + 1);
phones[*InfoNumber].aName[0] = NULL;
} //end inner if
return;
} //end outer if
} //end for
puts("ERR\n입력이 정상적으로 진행되지 않았습니다.");
}
이건 입력부분.
VS 2010으로 컴파일했을때, 한글이 깨져서 배열에 등록됨.
if(phones[i].aName[0] == NULL) { //빈 파일에만 적용됨
이부분은 다른분들은 전화번호부 목록에서 제거를 어떻게 구현하시는지는 모르겠는데,
나는 지울 구조체 이름 배열의 첫 자리에다가 NULL문자를 넣어놔서 빈 구조체/ 있는 구조체를 구별해
또 이상한게 첫번째 한글만 이상하게 등록되어
메인부분에 뭔가 잘못한게 있는거 아닌가 해서 메인부분도 올려봄
파일 전체를 첨부할라그랬는데 확장자때문에 안되네... 도와줘 횽드류ㅠㅠㅠ
시발 소스 개귀엽네 나는 호날두라고 치면 너는 동네축구하는 초딩같다.
realloc 쓰는 인간이 있긴 있구나
시바류ㅠ 이거말곤 배운게 없어요ㅠㅠㅠ 근데 도와주셈
phones = (Info *)realloc(phones, *InfoNumber + 1); 여기서 realloc의 두번째 인자를 sizeof(Info)*(*InfoNumber + 1) 이걸로 변경하세요.
아 2시간 걸렸다. ㅁㅊ다 ㅁㅊ어
ㄴ 형 고마워 근뎀
모바일이라서 컴파일을 못해보겠네