恰瓜群众小唐 2017-06-22 08:17 采纳率: 0%
浏览 884

求助C语言大佬~不知道我的代码哪里错了

/*
英文算数计算系统
从键盘输入两个小于100的整数A和B,计算A与B两数的基本算数运算。需要注意的是:A和B的每一位数位上的数字由对应的英文单词给出。
系统要求:
(1)系统由菜单做导航,给出输入数据功能、退出程序功能、数据输入功能并能够循环输入执行运算等。
(2)在数据运算输入功能菜单下分别给出A与B的相加运算、A与B的相乘运算、A与B的相减运算、A与B的相除运算、A与B的相除取于运算等功能。
(3)当A输入为zero,同时B输入为zero时自动返回菜单上一级。
输入样例:
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
输出样例:
one + two = three
three four + five six = nine zero
zero seven + eight nine = nine six

*/
#include
#include
#include
#define N 30 //定义最大30个测试用例
char a[N][50]; //定义每个测试用例可以有50个字符
char comp[10][6] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
int val[N];

void StringBracket(char *str)//删除空格
{
int i,j,len;

len=strlen(str);
j=0;
for(i=0; i<len; i++)
{
    if(str[i]!=' ')
    {
        str[j]=str[i];
        j=j+1;
    }
}
str[j]='\0';

}

char calval(char *str) //计算每个表达式的值
{
int i,j,len,y;
int a1=0,a2=-1,b1=0,b2=-1;//每个表达式最多有4个整数
char str1[20],str2[20];//分解为两个字符串
char stra1[10],stra2[10]={0},strb1[10],strb2[10]={0};//每个字符串最多分解为两个子串

len=strlen(str);
for(i=0; i<len; i++)
{
    str1[i]=str[i];
    if(str[i]=='+'|| str[i]=='-'|| str[i]=='*'|| str[i]=='/'|| str[i]=='%')
    {
        str1[i]='\0';
        for(j=i+1; j<len; j++)

            str2[j-i-1]=str[j];
            str2[len-i-2]='\0';
            break;

    }
}

len=strlen(str1);
for(i=0; i<len; i++)
{
    stra1[i]=str1[i];
    if(i>1 && str1[i]==' ')
    {
        stra1[i]='\0';
        for(j=i+1; j<len; j++)

            stra2[j-i-1]=str1[j];
            stra2[len-i-1]='\0';
            break;

    }
}
len=strlen(str2);
for(i=0; i<len; i++)
{
    strb1[i]=str2[i];
    if(i>1 && str2[i]==' ') //i>1表示不考虑前面的空格
    {
        strb1[i]='\0';
        for(j=i+1; j<len; j++)

            strb2[j-i-1]=str2[j];
            strb2[len-i-1]='\0';
            break;

    }
}
StringBracket(stra1);
StringBracket(stra2);
StringBracket(strb1);
StringBracket(strb2);
for(i=0; i<10; i++)
{
    if(strcmp(stra1,comp[i])==0)    a1=i;
    if(strcmp(stra2,comp[i])==0)    a2=i;
    if(strcmp(strb1,comp[i])==0)    b1=i;
    if(strcmp(strb2,comp[i])==0)    b2=i;
 }
 if(a2>=0) a1=a1*10+a2; //a2初始化为-1,>=0表示为两位数
 if(b2>=0) b1=b1*10+b2;
switch(y)
{
    case 1:
        return a1+b1;
        break;
    case 2: 
        return a1-b1;
        break;
    case 3: 
        return a1*b1;
        break;
    case 4: 
        return a1/b1;
        break;

    case 0:
        return a1%b1;
        break;
    default:
        printf("    输入错误,请重新输入\n");
}

}

int main()
{

int i,j,n=0;
int y;
char str[10];
printf("|--------------------------------|\n");
printf("| 英文算数计算系统 |\n");
printf("| 1--加法运算 |\n");
printf("| 2--减法运算 |\n");
printf("| 3--乘法运算 |\n");
printf("| 4--除法运算 |\n");
printf("| 0--相除取余运算 |\n");
printf("|--------------------------------|\n\n");
printf("|你想要进行哪一种运算(0-4) |\n");

scanf("%d",&y);
system("pause");
system("cls");

printf("Please input numbers:\n");
while(1)
{
    gets(a[n]);
    val[n]=calval(a[n]);
    if(val[n]==0) 

        break;
        n++;

    if(n>=N)

        break;

}
printf("Output:\n");
for(i=0;i<n;i++)
{
    if (val[i]>0)
    {
        itoa(val[i], str, 10);//整数转换为字符串
        printf("%s ",a[i]);//输出原表达式
        for(j=0;j<strlen(str);j++)
        {
            printf("%s ",comp[str[j]-0x30]);
        }
    }
    printf("\n");
}

return 0;

}

  • 写回答

2条回答 默认 最新

  • 恰瓜群众小唐 2017-06-22 08:25
    关注

    大致思路是先做一个菜单导航,然后选择进行计算

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器