// 프로그램 실행시 입력 횟수 받기 (5를 입력 받았다면)
//입력 5번 받기
// 첫번째 숫자가 start
// 두번째 숫자가 start.nextnode
// 세번째 숫자가 start.nextnode->nextnode ...
// 이렇게 하지말고 반복문을 사용해서 프로그램 입력횟수를 넣기
#include<stdio.h>
#include<stdlib.h>
struct node // 연결 리스트의 구조체 정의
{
int value = 0; //입력받은 숫자를 저장
struct node* nextnode = NULL; // 다음 노드의 주소를 저장할 포인터
};
int main(void)
{
node* start = (node*)malloc(sizeof(node));
int choice;
int arr[20];
printf("입력하실 횟수를 입력해주세요. : \n");
scanf_s("%d", &choice);
for (int i = 0; i < choice; i++)
{
printf("%d번째 저장할 숫자를 입력해주세요. : \n", i + 1);
scanf_s("%d", &arr[i]);
}
start->value = arr[0];
for (int i = 1; i < choice; i++)
{
start->nextnode = (node*)malloc(sizeof(node)); // nextnode에 리스트 구조체 주소 추가
start->nextnode->value = arr[i]; // value에 arr[i]부터 순서대로 저장
}
printf("\n%d\n", start->value);
printf("%d\n", start->nextnode->value);
printf("%d\n", start->nextnode->nextnode->value);
printf("%d\n", start->nextnode->nextnode->nextnode->value);
printf("%d\n", start->nextnode->nextnode->nextnode->nextnode->value);
}
실행결과
printf("%d\n", start->nextnode->nextnode->value);
printf("%d\n", start->nextnode->nextnode->nextnode->value);
printf("%d\n", start->nextnode->nextnode->nextnode->nextnode->value);
디버그해보면 이부분에 메모리 값이 없다고 뜨네..
해당 댓글은 삭제되었습니다.
형님 혹시 코드 써 주실수 있습니까..? 구조체 막 배워서 말씀하신 부분 어떻게 해야할지 모르겠어요;
아 이제 이해가 되네요 한번 해보겠습니다. 감사합니다
형님 감사합니다. 포인터구조체 생성해서 반복문에서 갱신해주니깐 바로 해결되었습니다.
그런거 떠나서 링크드리스트면 좀 링크드리스트답게 만들지.. 저렇게 main 안에 다때려박지말고 add함수로 빼고 좀 이런식으로..
죄송합니다. 어제 막 구조체 들어갔는데 조금 어렵네요 ㅠㅠ 공부 더 해오겠습니다.
암튼 문제는 두번째 for문에서 계속 start만 참조하니까 총 5개를 입력받으면 1인덱스에 10넣고나서 메모리 할당해서 1인덱스의 nextnode 주소 넣고 값20넣넣고 다시 메모리 할당해서 1인덱스의 nextnode에 다시 주소 넣고 값30 넣고 이렇게 반복하니까 실제론 2인덱스의 값만 계속 바꾸는 코드고 printf는두번째까지밖에 안나오는거
쓸대없는오지랍이긴 한데 애초에 탐색하는 함수부터 만들고 시작했으면 디버깅하면서 찍어봤다면 바로 눈치챌 수 있는부분인데 눈가리고 개발하는중인거지 뉴비라니까..
포인터랑 구조체를 배열이랑 비슷하다고 생각해서 1차원적으로 생각했던게 문제였습니다... 너무 얕은 지식으로 문제를 풀려고 했었네요. 말씀 감사합니다 공부 더 해올게요 ㅠㅠ