0
프로그램은 사용자가 입력 한 정수를 가져 와서 단일 연결 목록의 스택을 통해 이진으로 변환합니다. 내 toBin() 함수 또는 무한 루프를 일으키는 내 printStack() 함수 중 하나라고 생각합니다.무한 루프를 해결할 수 없음
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct node_def node;
struct node_def
{
int val;
node *next;
};
node *head;
void push(int val);
void pop(node *head);
int top();
void printStack();
int toBin(int val);
int main()
{
int num = 0;
printf("Enter an integer: ");
scanf("%d", &num);
push(num);
toBin(num);
printStack();
return 0;
}
void push(int val)
{
node *new;
new = malloc(sizeof(node));
if (head == NULL)
{
head = malloc(sizeof(node));
head->next = NULL;
head->val = val;
}
else
{
new->next = head;
new->val = val;
head = new;
}
return;
}
void pop(node *head)
{
node *tmp;
if(head == NULL)
{
printf("Stack is Empty\n");
return;
}
else
{
tmp = head;
head = head->next;
free(tmp);
}
return;
}
int top()
{
return(head->val);
}
void printStack()
{
node *tmp;
tmp = head;
if(head == NULL)
{
return;
}
while(head != NULL)
{
printf("%d ", head->val);
head = head->next;
}
printf("\n");
return;
}
int toBin(int val)
{
pop(head);
int i = 1, remainder, binary;
while(val != 0)
{
remainder = val % 2;
binary = binary + remainder * i;
val = val/2;
i = i * 10;
push(binary);
}
return val;
}
'printStack()'는'tmp'를 정의하지만, 그것을 사용하지 마십시오. 대신에'head'를 수정하면'head'는 쓸모가 없습니다. –
@WeatherVane 또한 pop() 함수에서이 작업을 수행했습니다. 둘 다 변경 한 후에 무한 루프가 사라졌습니다. 감사합니다! – mychem97
그러나 printstack()에 의해 수정 된 전역 변수와는 달리 pass by value 매개 변수를 수정 했으므로'pop (node * head)'에서 괜찮 았습니다. – bruceg