void conversion(int N) //十进制转换为八进制 { SqStack S; SElemType e;//调用栈初始化函数,初始化一个空栈 printf("%d转换为八进制数为:",N); while(N) { Push(S,N%8) ; //将N除以8的余数进栈 N=N/8 ; //将N更新为N除以8的商 } while( S.top != S.base ) //栈非空时 { printf("%d",&N); //将当前栈顶元素出栈 printf("%d",e); //输出栈顶元素 } printf("\n"); }
时间: 2023-06-17 12:06:44 浏览: 102
C用堆完成2、4、8、16进制转换
这段代码中存在一些错误,以下是修改后的代码:
```c
void conversion(int N) {
SqStack S;
SElemType e;
InitStack(S); // 初始化栈
printf("%d转换为八进制数为:", N);
while (N) {
Push(S, N % 8); // 将N除以8的余数进栈
N = N / 8; // 将N更新为N除以8的商
}
while (!StackEmpty(S)) { // 栈非空时
Pop(S, &e); // 将当前栈顶元素出栈
printf("%d", e); // 输出栈顶元素
}
printf("\n");
}
```
主要修改如下:
1. 初始化栈:在函数开始时,需要调用 `InitStack(S)` 初始化栈,否则栈无法使用。
2. 输出结果:在输出栈中元素时,应该使用 `Pop(S, &e)` 将元素弹出栈,然后输出该元素,而不是输出地址。
3. 判断栈是否为空:应该使用 `StackEmpty(S)` 判断栈是否为空,而不是 `S.top != S.base`。
阅读全文