Midsummer.747 2022-09-28 14:50 采纳率: 71.4%
浏览 43
已结题

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

其他功能都可以正常实现就是转换那部不对,是不是转换的函数写错了呢
#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;
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

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-09-29 15:22
    关注

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

    #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;
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月9日
  • 已采纳回答 10月1日
  • 创建了问题 9月28日

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行