菜单跳转失败
这是我按的一段代码:
#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;
}
}
上面两个原来是两个单独的程序,我现在想把它们合并在一起来当工具箱用,但在网上参考了各位大佬的想法,可以实现,但是并不会跳转到那两个程序,只会在第一个界面无限循环。。。怎么办,求大佬解答