回 帖 发 新 帖 刷新版面

主题:什么地方出错了?请高手指点!!

这个是一道由十进制向八进制转换的程序代码:
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
#define   error
#define   ok
#define   true
#define   false
#define stack_init_size    1000
#define stackincrement     100
typedef int status;
typedef struct{
   int    *base;
   int    *top;
   int     stacksize;
}Sqstack;
int initstack(Sqstack &S){
    S.base=(int*)malloc(stack_init_size*sizeof(int));
    if(!S.base)     return 0;
    S.top=S.base;         //空栈
    S.stacksize=stack_init_size;
    return 1;
}
int stackempty(Sqstack S){
    if(S.base==S.top)
        return 1;
    else
        return 0;
}
int push(Sqstack &S,int e){  //插入新元素E作为新的栈顶元素
    if(S.top-S.base>S.stacksize)   {//栈满
        S.base=(int*)realloc(S.base,(S.stacksize+stackincrement)*sizeof(int));
        if(!S.base)   return 0;//分配失败
        S.top=S.base+S.stacksize;
    S.stacksize+=stackincrement;
    }
    *S.top++=e;
    return 1;
}
int pop(Sqstack &S,int &e){//若栈不空,则删除栈顶元素,并用E返回其值
    if(S.top=S.base)   return 0;
    e=*--S.top;
    return 1;
}
int conversion(){
    int e,n;
    Sqstack  S;
    initstack(S);
    cout<<"输入一个十进制的数n:";
    cin>>n;
    while(n)
    {
        push(S,n%8);
        n=n/8;
    }
    cout<<"输出这个十进制数对应的八进制数:";
    while(!stackempty(S))
    {
        pop(S,e);
        cout<<e;
    }
    return 0;
}
void main()
{
    char a;
    Sqstack S;
    initstack(S);
    cout<<conversion();
    cin>>a;
}

如果以十进制的1348输入,那输出的就应该是八进制的2504,但是却输出一个很长的地址:-8589934600.
这到底是哪里错了拉??

回复列表 (共5个回复)

沙发


直接用C++里写好的栈应该是比较方便吧我以前写了一个十进制转2,8,16的,用的是标准库的栈
string numexchange(int num,int b)
{
    string numbase="0123456789ABCDEF";
    string numstr="";
    stack<char> stk;
    do
    {
        stk.push (numbase[num%b]);
        num/=b;
    }while(num!=0);
    while(!stk.empty ())
    {
        numstr+=stk.top ();
        stk.pop ();
    }
    return numstr;
}

板凳

真是不好意思,
我是一个初学者,你那个程序还看不太懂.
看来还的继续努力呀.[em8]

3 楼


其实和你的那个原理差不多,只不过是用字符串做的,你自己写的那个栈还是有点问题,因为你定义为整型以后一个一个出栈的时候后面的数会把前面的数给覆盖了,达不到你想要的效果,最好声明为STRING型的.而且好象你自己写的栈在初始化上也有点问题

4 楼

用C++定义一个栈类,一目了然,你这个栈可有结口有问题

5 楼

int pop(Sqstack &S,int &e){//若栈不空,则删除栈顶元素,并用E返回其值
    if(S.top=S.base)   return 0;
    e=*--S.top;
    return 1;
}

你观察你的这个函数,主要问题在这里。

cout<<conversion();
再看这个,你把返回值输出意欲何为?

我来回复

您尚未登录,请登录后再回复。点此登录或注册