标题:菜单跳转失败
只看楼主
a1115616038
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-4-6
结帖率:100%
已结贴  问题点数:20 回复次数:2 
菜单跳转失败

这是我按的一段代码:

#include <stdio.h>

char num2char(int num)//声明函数:数字转字符
{
    if(num >=0 && num <= 9)
        return num + '0';  //将0~9之间的数字转换成字符
    else
        return num - 10 + 'a';//将大于10的数字转换成字符
}
int char2num(char ch)//声明函数:字符转数字
{
    if(ch >= '0' && ch <= '9') /*将数字字符转换成数字*/
        return ch - '0';
    else
        return ch - 'a' + 10;/*将字母字符转换成数字*/
}
long source2decimal(char tmp[],int source)//声明转化为目标进制
{
    int zgy = 0;  //展开后的和
    int num = 0;
    for(;tmp[zgy] != '\0';zgy++)
    {
        num = num * source;
        num += char2num(tmp[zgy]); //累加
    }
    return num;
   
}
int decimal2obj(char tmp[],long decimal,int obj)//声明取余存放在数组
{
    int zgy = 0;
    int rem;
   
    while(decimal)
    {
        rem = decimal % obj;
        tmp[zgy++] = num2char(rem);   //求出余数并转换为字符
        decimal = decimal / obj;      //用十进制数除以基数
    }
    tmp[zgy] = '\0';
   
    return zgy;
}

void output(char tmp[],int zgy)//定义进制输出
{
    int i;
    for(i = zgy-1 ;i >= 0;i--)   //输出数组中的值
        printf("%c",tmp[i]);
    printf("\n");
}


int function_1()//主程序
{
    printf("进制转换\n");
    printf("不能转换负数,会出错\n");
    printf("附:在输入转换类型时,当转换数字中的任意一位数字大于进制类型时,会计算错误(例如声明“114115”为二进制时会算错)\n");//提示
    char tmp[100];
    int source; //存储原数制
    int obj; //存储后数制
    int flag = 1;//存储退出程序的标志
    int dec_num;
    int zgy;
    while(flag) //利用flag值控制循环是否结束
    {
        printf("输入一个转换数字:");
        scanf("%s",tmp);
        printf("请输入转换前进制类型:") ;
        scanf("%d",&source);
        printf("请输入转换后进制类型:");
        scanf("%d",&obj);
        
        dec_num = source2decimal(tmp,source);  //调用
        zgy = decimal2obj(tmp,dec_num,obj);
        output(tmp,zgy);
        
        printf("是否继续?1/0 (是/否):");//选择1为"是"重新循环:0为"否",完成循环。
        scanf("%d",&flag);
        
    }
   
}


int function_2(void)
{
    printf("欢迎使用此简单的计算器\n");
    printf("user=0.0.1\n");
    printf("本计算器仅使用计算加减乘除,比较简单\n") ;
     
    int A, B, res;            //分别存放两个操作数及运算符合法时的运算结果
    char op;               //存放运算符     
    printf("输入表达式 A op B: ");             //提示输入表达式
    scanf("%d%c%d", &A, &op, &B) ;           //输入表达式
    if(op == '+' || op == '-' || op == '*' || op == '/' )
    {  //op为+,-,*,/中一个运算符时
        if(op == '/'  &&  B ==0 )                   //当式子是除法且除数为0时
            printf("Divided by 0\n");                //输出 Divided by 0
        else
        {//A op B为合法的四则运算式子
        if(op == '+')    res = A + B;            //计算res=A+B
        else if(op == '-') res = A - B;         //计算res=A-B
        else if(op == '*') res = A * B;         //计算res=A*B
        else res = A / B;                        //计算res=A/B
        printf("%d%c%d=%d\n", A, op, B, res);    //打印表达式及其结果         
        }        
    }
    else                                           //运算符非法时
        printf("Error\n");
}

main(void)
{
  int i;
  loop:;
  printf("\n\t\t|----------------自制工具箱--------------------|");
  printf("\n\t\t|---------  Please input ( 0 - 2 ) ------------|");
  printf("\n\t\t|----------------------------------------------|");
  printf("\n\t\t|             1. 进制转换                      |");
  printf("\n\t\t|             2. 简易计算器                    |");
  printf("\n\t\t|             0. Exit                          |");
  printf("\n\t\t|----------------------------------------------|");
  
  scanf("%d",&i);
  switch(i)
  {
    case 0:return 0;
    case 1:function_1;goto loop;
    case 2:function_2;goto loop;
    default:printf("Input Error!!!");
   
    return 0;
  }
}



上面两个原来是两个单独的程序,我现在想把它们合并在一起来当工具箱用,但在网上参考了各位大佬的想法,可以实现,但是并不会跳转到那两个程序,只会在第一个界面无限循环。。。怎么办,求大佬解答
搜索更多相关主题的帖子: tmp int num printf 转换 
2021-04-06 23:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
听不懂你说什么,你应该说“输入什么,输出什么,期待输出什么”就行了。

case 1:function_1;goto loop; 应该是 case 1:function_1();goto loop; 吧
2021-04-07 08:35
a1115616038
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-4-6
得分:0 
回复 2楼 rjsp
可能我说的有点急了,抱歉。。。。刚才按照您的方法试验了下,成功了,真是太谢谢您了
2021-04-07 21:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505361-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.203932 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved