#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char *name;
char *phone;
} Record;
#define TABLE_SIZE 128
#define INFO_SIZE 32
#define BUFFER_SIZE 256
int main()
{
char name[INFO_SIZE], phone[INFO_SIZE], buffer[BUFFER_SIZE];
Record records[TABLE_SIZE], *precords = records;
int num_records = 0;
while (fgets(buffer, sizeof(buffer), stdin) != NULL)
{
if(sscanf(buffer, "%s %s", name, phone) > 0)
{
Record record;
record.name = name;
record.phone = phone;
records[num_records++] = record;
printf("%d", num_records);
printf("Name: %s, Phone: %s\n", precords -> name, precords -> phone);
}
else
break;
}
for (int i = 0; i < num_records; i++)
{
printf("Name: %s, Phone: %s\n", precords -> name, precords -> phone);
precords++;
}
}
이 코드에서 이름하고 번호 여러개 입력하면 차례대로 출력되는게 아니라 마지막에 입력한걸로 다 덮어씌어져서 출력됨 이 오류 어케 고침??
포인터를 잘못 다뤘음. Record struct의 멤버인 name과 phone 모두 포인터잖아. 그런데 records 배열에 담긴 원소들의 name과 phone 모두 같은 주소, 배열 name과 phone의 시작 주소를 값으로 담고 있으니 나중에 당연히 모두 똑같이 나오는거지.
해결하고 싶으면 메모리 동적 할당을 하던가 해서 서로 다른 Record 인스턴스의 name과 phone이 일단 서로 다른 값을 가지도록 해야겠지. 같은 값을 가지면 당연히 같은 값을 출력하니까.
record.name = strdup(name); record.phone = strdup(phone); 해봐. free는 알아서 하고...
적은대로 해봤는데 이상한 값이 출력됨;;
그럼 일단 record에 값 넣기 전에 name, phone을 제대로 읽어오는지 확인해봐. printf("%s %s\n", name, phone); 해봐서 제대로 값이 나오나 봐봐.
제대로 값이 나오긴 나옴
나도 테스트해봤는데, 제대로 나오는데...
해결했어 고마워!
해당 댓글은 삭제되었습니다.
while문 안에있는것은 오류테스트해볼려고 넣은거였음 ㅈㅅ
오류해결했습니다. 여러분 모두 감사해요