数制转换的一个菜单,无法正确输出转换后的数

其他功能都可以正常实现就是转换那部不对,是不是转换的函数写错了呢
#include
#include
#include

#define MAXSIZE 100
int exitflag = 1;
typedef int status;
//typedef struct SElemType;
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
status Initstack(LinkStack &S);//初始化链栈
status Pushstack(LinkStack &S,int n);//入栈
status Popstack(LinkStack &S);//出栈
status EmptyStack(LinkStack S);//判断栈是否为空
void Conversion(LinkStack &S,int n,int m);//数制转换函数
void PrintMenu();
void Menu(int choice);
void Quit();

//主函数
int main()
{
int m,n;
int choice;
LinkStack S;
//Initstack(S); //初始化链栈
do
{
PrintMenu();
scanf("%d", &choice);
Menu(choice);
} while (exitflag); //实现菜单功能
return 0;
}
//初始化函数
status Initstack(LinkStack &S)
{S=NULL;
return 1;
}
//入栈函数
status Pushstack(LinkStack &S,int n)
{
int i;
LinkStack p;
p=new StackNode;
p->data=n;
p->next=S;
S=p;
return 1;
}
//出栈函数
status Popstack(LinkStack &S/,int x/)
{LinkStack p;
if(S=NULL)
return 0;
p=S;
S=S->next;
return p->data;
}
//判空函数
status EmptyStack(LinkStack S)
{
if(S=NULL)
return 1;
else
return 0;
}
//输出菜单
void PrintMenu()
{
printf("\n");
printf("进制转换\n");
printf("1.输入一个十进制数n\n");
printf("2.输入转换的进制m\n");
printf("3.进制转换\n");
printf("4.继续或退出(y/n)\n");
printf("请选择1-4:");
}
//菜单内容
void Menu(int choice)
{
LinkStack S;
switch (choice) {
case 1:
int m,n;
printf("请输入十进制数n:");
scanf("%d",&n);
break;
case 2:
printf("请输入转换的进制m:");
scanf("%d",&m);
break;
case 3:
Conversion(S ,n ,m );
break;
case 4:
Quit();
break;
default:
printf("输入错误请重新输入\n");
break;
}
}
//退出
void Quit()
{
printf("继续或退出(y/n)\n");
char c;
getchar(); //吸收缓存区多余字符
c = getchar();
if ( c == 'n') {
exitflag = 0;
}
else {
if (c == 'y') {
exitflag = 1;
}
else {
printf("输入错误\n");
}
}
}
void Conversion(LinkStack &S,int n,int m)
{
int r;
char a=65;
Initstack(S);
while(n){
Pushstack(S,n%m);
n=n/m;
}
while(! EmptyStack(S)){
r=Popstack(S);
if(r>=10){
a=a+r-10;
printf("%c",a);
}
else
{
printf("%d",m);
}
a=65;
}
}
运行结果如下:

img

修改如下,改动处见注释,供参考:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXSIZE 100
int exitflag = 1;
typedef int status;
//typedef struct SElemType;
typedef struct StackNode
{
    int data;
    struct StackNode* next;
}StackNode, * LinkStack;
status Initstack(LinkStack& S);//初始化链栈
status Pushstack(LinkStack& S, int n);//入栈
status Popstack(LinkStack& S);//出栈
status EmptyStack(LinkStack S);//判断栈是否为空
void Conversion(LinkStack& S, int n, int m);//数制转换函数
void PrintMenu();
void Menu(int choice);
void Quit();

//主函数
int main()
{
    int m, n;
    int choice = 1;
    LinkStack S;
    //Initstack(S); //初始化链栈
    do
    {
        PrintMenu();
        scanf("%d", &choice);
        if (choice == 4)  break;
        printf("请输入十进制数n:");   //修改
        scanf("%d", &n);              //修改 
        printf("请输入转换的进制m:"); //修改
        scanf("%d", &m);              //修改
        Conversion(S, n, m);
                 //Menu(choice);        修改
    } while (exitflag); //实现菜单功能
    return 0;
}
//初始化函数
status Initstack(LinkStack& S)
{
    S = NULL;
    return 1;
}
//入栈函数
status Pushstack(LinkStack& S, int n)
{
    int i;
    LinkStack p;
    p = new StackNode;
    p->data = n;
    p->next = S;
    S = p;
    return 1;
}
//出栈函数
status Popstack(LinkStack& S) //, int x) 修改
{
    status x;
    LinkStack p;
    if (S == NULL) //if (S = NULL) 修改
        return 0;
    p = S;
    S = S->next;
    x = p->data; //修改
    free(p);    //修改
    return x;    //修改 
}
//判空函数
status EmptyStack(LinkStack S)
{
    if (S == NULL)  //if (S = NULL)
        return 1;
    else
        return 0;
}
//输出菜单
void PrintMenu()
{
    printf("\n");
    printf("1.进制转换  (步骤说明:)\n");
    printf("(1.)输入一个十进制数n。 ");
    printf("(2.)输入转换的进制m。 ");
    printf("(3.)进制转换。\n");
    printf("4.继续或退出\n\n");
    printf("请选择 1 或 4:");
}
//菜单内容
void Menu(int choice)
{
    LinkStack S;
    switch (choice) {
    case 1:
        int m, n;
        printf("请输入十进制数n:");
        scanf("%d", &n);
        break;
    case 2:
        printf("请输入转换的进制m:");
        scanf("%d", &m);
        break;
    case 3:
        Conversion(S, n, m);
        break;
    case 4:
        Quit();
        break;
    default:
        printf("输入错误请重新输入\n");
        break;
    }
}
//退出
void Quit()
{
    printf("继续或退出(y/n)\n");
    char c;
    getchar(); //吸收缓存区多余字符
    c = getchar();
    if (c == 'n') {
        exitflag = 0;
    }
    else {
        if (c == 'y') {
            exitflag = 1;
        }
        else {
            printf("输入错误\n");
        }
    }
}
void Conversion(LinkStack& S, int n, int m)
{
    int r;
    char a = 65;
    Initstack(S);
    while (n) {
        Pushstack(S, n % m);
        n = n / m;
    }
    while (!EmptyStack(S)) {
        r = Popstack(S);
        if (r >= 10) {
            a = a + r - 10;
            printf("%c", a);
        }
        else
        {
            printf("%d", r); // m 修改
        }
        a = 65;
    }
}

你的m和n应该是全局变量才对呀,怎么到处定义,每个函数里都有m,n,然后都没赋值
Menu这个函数会多次执行,每次执行都是一个临时变量m,n,你给它赋值有什么用,Menu执行完就释放内存了,再执行又是空的
你前面写了一大堆压站出站,m和n的值又不进站,你这站定义了个寂寞