#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
struct person { //이름과 번호 구조체
char name[15];
char pnumber[15];
char blank[10];
}data[SIZE]; // 구조체 배열 선언
int i=-1; //배열의 인덱스 값
void insert(void); // 입력 함수
void del(void); // 삭제 함수
void list(void); // 목록 함수
void search(void); // 검색 함수
int main(void)
{
FILE *fp;
fp = fopen("numberlist.txt", "r+ ");
int n=1;
while (1) //메뉴를 선택할 때까지 무한히 반복
{
printf("-------------전화번호부----------\n");
printf(" 1.입력\n");
printf(" 2.삭제\n");
printf(" 3,목록\n");
printf(" 4.검색\n");
printf(" 5.종료\n");
printf("----------------------------------\n");
scanf("%d", &n); // 메뉴 번호 사용자로부터 입력받음
switch (n)
{
case 1:
insert();
break;
case 2:
del();
break;
case 3:
list();
break;
case 4:
search();
break;
case 5:
return 0;
default :
printf("잘못 입력하였습니다.\n");
}
}
fclose(fp);
}
void insert(void) //입력 함수 생성
{
char n[15], pn[15]; //이름과 번호를 저장하는 배열
while (1)
{
i++;
printf("이름을 입력하세요. (종료시 0 입력) \n");
scanf("%s", n);
if (n[0] == '0')
return;
strcpy(data[i].name, n);
printf("전화번호를 입력하세요. \n");
scanf("%s", pn);
strcpy(data[i].pnumber, pn);
FILE *fp;
fp = fopen("numberlist.txt", "w+ ");
fprintf(fp, "%s %s\n", data[i].name, data[i].pnumber);
}
}
void del(void) //삭제 함수 생성
{
int result;
char n[15], pn[15];
printf("삭제할 이름을 입력하세요. \n");
scanf("%s", n);
for (int s = 0; s < SIZE; s++){
result = strcmp(data[s].name, n);
if (result == 0) {
strcpy(data[s].name, data[s + 1].name);
strcpy(data[s].pnumber, data[s + 1].pnumber);
strcpy(data[s + 1].name, "");
strcpy(data[s + 1].pnumber, "");
printf("삭제가 되었습니다.\n");
i--;
break;
}
}
if (result != 0)
printf("없는 이름입니다.\n");
return;
}
void list(void)
{
int c;
FILE *fp;
fp = fopen("numberlist.txt", "r ");
if (i == -1){
printf("저장된 번호가 없습니다.");
return;
}
for (int j = 0; j < i; j++) {
printf("이름 :%s 전화번호 :%s \n", data[j].name, data[j].pnumber);
}
fclose(fp);
}
void search(void)
{
int result;
char n[15];
printf("검색할 이름을 입력하시오. \n");
scanf("%s", n);
for (int s = 0; s < SIZE; s++){
result = strcmp(data[s].name, n);
if (result == 0){
printf("이름:%s전화번호:%s \n", data[s].name, data[s].pnumber);
break;
}
}
if (result != 0) {
printf("입력 값에 대한 정보가 없습니다.\n");
}
}
저장이 제대로 안되는데 어쩌죠
종료 후에 목록불러올때 전에 저장했던거는 목록에 남아있게끔 하려는데
형 저도 이거 몇일전에 풀었었는데, 위코드는 복잡해서 잘 못보겠고, 실행할때 "rt"모드로 스트림만들어서 파일구조체에서 fscanf함수로 일단 받아놔야하는거 아닌가요?만약 파일이없으면 NULL이 리턴될테니까 "at"모드로 스트림 형성해야할거같고..위에 메인함수 초반부에 파일에 스트림 만들었는데, fscanf같은 읽어들이는거 없이 바로 스트림 닫아버리시는거같아서요. 저도 초보라 걍 참고만해주세여
ㅇㅇㅇ// 님꺼 소스코드좀 참고할수 있을까요?