십진수를 이진수로 변환하고 이진수 값이 스택에 저장되는 C 프로그래밍 코드를 시도하고 있습니다.
내 코드에 따르면 실행할 때 오류 응답이 표시됩니다. peek 메서드를 사용하여 이진수를 표시하려고하면 응용 프로그램이 끝없이 실행됩니다.
#include<stdio.h>
#include<stdlib.h>
#define MAX 50
typedef enum{FALSE, TRUE} boolean;
typedef struct stack{
int top;
int a[MAX];
} stack;
void CreateStack(stack *s){
s->top = -1;
}
boolean isEmpty(stack *s){
return (s->top == -1);
}
boolean isFull(stack *s){
return(s->top == MAX - 1);
}
void push(stack *s, int data){
if(isFull(s)){
exit(1);
}
else{
s->top = s->top + 1;
s->a[s->top] = data;
}
}
int pop(stack *s){
if(isEmpty(s)){
exit(1);
}
else{
return s->a[s->top];
s->top = s->top - 1;
}
}
int peek(stack *s){
return s->a[s->top];
}
void binary(stack *s, int num){
int n;
while(num != 0){
if(!isFull(s)){
n = num % 2;
push(s,n);
num = num / 2;
}
else{
exit(1);
}
}
}
void main() {
stack s;
CreateStack(&s);
int num,n;
printf("Enter the decimal number: ");
scanf("%d",&num);
binary(&s,num);
printf("Top = %d\n",peek(&s));
while(!isEmpty(&s)){
printf("%d ",pop(&s));
}
}
pop()
데드 코드 포함 — 값을 반환하지만 top
반환 연산자 뒤에 감소하고 더 새로운 값에 도달합니다.
int pop(stack *s){
if(isEmpty(s)){
exit(1);
}
else{
return s->a[s->top];
s->top = s->top - 1; // <------------
}
}
다음과 같이 변경하십시오.
int pop(stack *s){
if(isEmpty(s)){
exit(1);
}
else{
int temp = s->a[s->top];
s->top = s->top - 1;
return temp;
}
}
추신 나에게는 else
키워드를 생략 할 수 있지만 맛 문제입니다.
int pop(stack *s) {
int temp;
if(isEmpty(s))
exit(1);
temp = s->a[s->top];
s->top = s->top - 1;
return temp;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다