各位程序员前辈,请问这个怎么改错

发布于:2022-10-27 ⋅ 阅读:(326) ⋅ 点赞:(0)

#0include <stdio.h>
#include <stdlib.h>
#define A 100


struct SqStack {
    int *top;
    int *base;
};
bool init(SqStack *S);
bool push(SqStack &S, int val);
void printStack(SqStack S);
bool pop(SqStack &S,  int &val);
bool getTop(SqStack S, int &val);
int getLen(SqStack S);
void conversion8(int N);
void conversion2(int N);
void conversion16(int N);
void conversion4(int N);

int main() {
    printf("应用\n\n");
    SqStack S;
    if (init(&S))
        printf("初始化成功!\n\n");
    else
        exit(1);
    system("pause");
    printf("请输入元素个数:");
    int num, val;
    scanf("%d", &num);
    for (int i = 1; i <= num; i++) {
        printf("请输入第%d个元素:", i);
        scanf("%d", &val);
        push(S, val);
    }

    printf("STACK长度为%d\n\n", getLen(S));
    system("pause");
    int popVal = -1;
    if (pop(S, popVal)) {
        printf("出STACK成功!弹出的元素是:%d\n\n", getLen(S));
    }
    system("pause");
    int topVal = -1;
    if (getTop(S, topVal)) {
        printf("查找STACK-TOP成功!TOP元素是:%d\n\n", topVal);
        printf("STACK长度为%d\n\n", getLen(S));
    }
    system("pause");
    int N;
    printf("欢迎使用进制转换器!\n请输入你想使用的进制转换(2,4,8,16):\n");
    for (int i = 1; i++;) {
        int p, q;
        scanf("%d", &p);
        switch (p) {
            case 2: {
                printf("请输入你想转换的数字(支持十进制转换二进制):");
                scanf("%d", &N);
                printf("转换后的结果是:\n");
                conversion2(N);
                printf("\n");
            }
            break;
            case 8: {
                printf("请输入你想转换的数字(支持十进制转换八进制):");
                scanf("%d", &N);
                printf("转换后的结果是:\n");
                conversion8(N);
                printf("\n");
            }
            break;
            case 16: {
                printf("请输入你想转换的数字(支持十进制转换十六进制):");
                scanf("%d", &N);
                printf("转换后的结果是:\n");
                conversion16(N);
                printf("\n");
            }
            break;
            case 4: {
                printf("请输入你想转换的数字(支持十进制转换四进制):");
                scanf("%d", &N);
                printf("转换后的结果是:\n");
                conversion4(N);
                printf("\n");
            }
            break;
            default:
                printf("继续请按1,退出请按0\n请输入你的选择:");
        }
        printf("继续请按1,退出请按0\n请输入你的选择:");
        scanf("%d", &q);
        if (q == 1) {
            printf("请输入你想使用的进制转换(2,4,8,16):\n");
        }
        if (q == 0)
            break;
    }
    return 0;
}

bool init(SqStack *S) {
    S->base = S->top = (int *)malloc(A * sizeof(int));
    if (S->top == NULL)
        return false;
    else
        return true;

}

bool push(SqStack &S, int val) {
    /
    if (S.top - S.base >= A)
        return false;
    *S.top ++ = val;
    return true;
}


void printStack(SqStack S) {
    printf("遍历结果为:");
    int *p = S.base ;
    for (; p < S.top ; p++)
        printf("%8d", *p);
    printf("\n");

}

bool pop(SqStack &S, int &val) {
    if (S.top == S.base)
        return false;
    S.top  = S.top - 1;
    val = *--S.top ;
    return true;
}

bool getTop(SqStack S, int &val) {
    if (S.top == NULL )
        return false;
    val = *(S.top - 1);
    return true;
}

int getLen(SqStack S) {
    return S.top - S.base ;
}

void conversion8(int N) {
    void printStack(SqStack Z);
    int val;
    SqStack Z;

    init(&Z);
    while (N > 0) {
        push(Z, N % 8);
        N = N / 8;
    }
    while (Z.top != Z.base) {
        pop(Z, val);
        printf("%d", val);
    }
}

void conversion2(int N) {
    int val;
    SqStack Z;
    init(&Z);
    while (N > 0) {
        push(Z, N % 2);
        N = N / 2;
    }
    while (Z.top != Z.base ) {
        pop(Z, val);
        printf("%d", val);
    }
}

void conversion16(int N) {
    int val;
    SqStack Z;
    init(&Z);
    while (N > 0) {
        push(Z, N % 16);
        N = N / 16;
    }
    while (Z.top != Z.base ) {
        pop(Z, val);
        switch (val) {
            case 10:
                printf("A");
                break;
            case 11:
                printf("B");
                break;
            case 12:
                printf("C");
                break;
            case 13:
                printf("D");
                break;
            case 14:
                printf("E");
                break;
            case 15:
                printf("F");
                break;
            default:
                printf("%d", val);
                break;
        }
    }
}

void conversion4(int N) {
    int val;
    SqStack Z;
    init(&Z);
    while (N > 0) {
        push(Z, N % 4);
        N = N / 4;
    }
    while (Z.top != Z.base ) {
        pop(Z, val);

printf("%d", val);
    }
}

c2101a74d9ef498faa7592af6d5ef137.jpg
        

 

运行中程序会中断,且转换数位h结果为0或报错。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到