编辑代码

#include <stddef.h>
#include <stdio.h>
#define DATATYPE char
#define MAXSIZE 100

typedef struct {
    DATATYPE data[MAXSIZE]; 
    int top; 
} SEQSTACK;

void init_stack(SEQSTACK *s) {
    s->top = -1; 
}
int stack_empty(SEQSTACK *s) {
    return s->top == -1; 
}
void push_stack(SEQSTACK *s, DATATYPE x) {
    if (s->top == MAXSIZE - 1)
        printf("stack full\n");
    else {
        s->top++;
        s->data[s->top] = x; 
    }
}
DATATYPE gettop_stack(SEQSTACK *s) {
    if (stack_empty(s)) {
        printf("stack empty.\n");
        return 0;
    } else {
        return s->data[s->top]; 
    }
}

DATATYPE pop_stack(SEQSTACK *s) {
    if (stack_empty(s)) {
        printf("stack empty\n");
        return 0;
    } else {
        DATATYPE x = s->data[s->top];
        s->top--; 
        return x;
    }
}

void clear_stack(SEQSTACK *s) {
    s->top = -1;
}

void dec_to_oct(int num, SEQSTACK *s) {
    if (num == 0) {
        push_stack(s, '0'); 
    } else {
        while (num > 0) {
            push_stack(s, (num % 8) + '0'); 
            num /= 8;
        }
    }
}
int main() {
    SEQSTACK stack; 
    init_stack(&stack); 

    int num;
    printf("请输入一个10进制整数: ");
    if (scanf("%d", &num) != 1) {
        printf("输入无效!\n");
        return 1; 
    }
    dec_to_oct(num, &stack);
    printf("转换后的8进制数为: ");
    while (!stack_empty(&stack)) {
        printf("%c", pop_stack(&stack)); 
    }
    printf("\n");

    return 0;
}