| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4273 人关注过本帖
标题:对于输入英文数字(one+two这样)进行数学运算输出three的后续
取消只看楼主 加入收藏
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:19 
对于输入英文数字(one+two这样)进行数学运算输出three的后续
之前看了有个帖子出个了想法,就是输入英文数字进行数学运算,然后输出英文结果的题目。我自己写了下,出了点问题,运行没有错误,但是结果不正确,具体问题我提供加法部分的代码,麻烦各位看下是哪里不对
#include <stdio.h>
#include <stdlib.h>
int main(void)
{   double  a,b,c;   //存储英文对应的运算数字
    char i;          //存储运算符
    int  m,n,d;     //用于取余
    int ag;         //控制再次运算
    int j=0,k=0;     //j对应字符数组下标,k用于循环判断对应下标
    const char string[10][6]={
                               "zero",
                              "one",
                              "two",
                              "three",
                              "four",
                              "five",
                              "six",
                              "seven",
                              "eight",
                              "nine"
                              };           
    char str1[5]={"seven"};                       //存储输入的英文数字
    double jiafa(double x,double y);
    double jianfa(double x,double y);
    double chengfa(double x,double y);
    double chufa(double x,double y);
    int quyu(int x,int y);
    printf("这是一个十进制简单的计算器,欢迎使用\n\n");
    do
        {
        system("cls");                     //清屏   
        printf("请输入 + 选择加法运算\tEnter确认\n\n");   
        printf("请输入 - 选择减法运算\tEnter确认\n\n");
        printf("请输入 * 选择乘法运算\tEnter确认\n\n");
        printf("请输入 / 选择除法运算\tEnter确认\n\n");
        printf("请输入 %% 选择求余运算\tEnter确认\n\n");
        printf("----------------------------------\n\n");
        printf("请选择上述五种运算符后Enter,否则输入其他任意键后Enter确认退出\n\n");
        scanf("%c",&i);
        if(i=='0')
             break;
        printf("\n");
       if(i=='+')
       {
        printf("请输入第一个数字,然后按Enter\n\n");
        for(k=0;k<=5;k++)        //输入要运算的第一个英文数字   
            {                    //英文数字最多5个字符,故k<=5
                scanf("%c",str1);
            }
 //        getch();
 //     scanf("%lf",&a);
//        gets(str1);
        for(j=0;j<10;j++)    //循环判断输入的英文字符对应数字并赋值给a   
            {                //此段有点问题a得到的值不正确,固定数字
                if(strcmp(str1,string[j])==0)
                    a=j;              
            }
        printf("a=%d",a);             //验证第一个英文数字是否对应数字
        printf("\n");
        printf("请输入第二个数字,然后按Enter\n\n");
        for(k=0;k<=5;k++)              //输入要运算的第二个英文数字   
            {
                scanf("%c",str1);
            }
//      scanf("%lf",&b);
//      gets(str1);
        for(j=0;j<10;j++)              //循环判断输入的英文字符对应数字   
            {
                if(strcmp(str1,string[j])==0)
                    b=j;
            }
        printf("b=%d",b);            //验证第二个英文数字是否对应数字                        
        printf("\n");
           c=jiafa(a,b);                //调用加法函数并将结果赋值给c
        for(j=0;j<10;j++)               
        {   
            if(c==j)
                    {
                        printf("%s\n",string[j]);   
                    }
        }
        printf("他们的和是:%lf\n\n",c);
        getchar();
        printf("请输入1后Enter再次运算,或非1任意键后按Enter退出\n\n");
        scanf("%d",&ag);        
        getchar();
        printf("\n");
       }

[ 本帖最后由 wanglianyi1 于 2015-7-20 11:55 编辑 ]
搜索更多相关主题的帖子: 英文数字 include double 数学 
2015-07-20 11:20
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
程序有很多注释,因为初学嘛,这样多写我容易理解点。多见谅各位。
我用的定义一个常量字符串数组string,用scanf循环输入要数学运算的两个英文数字存到str1数组中
然后用strcmp判断输入的英文数字和常量数组中的哪一个相等,就把对应的数组元素下标赋值给a或b,来实现输入英文数字转换成阿拉伯数字。最后的输入结果类似,但还没有考虑好两位数的运算,不着急这个,先把个位数运算弄好再说
2015-07-20 11:46
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 2楼 TonyDeng
刚吃饭去了,我认为的问题应该是出现在判断输入的字符数组和常量字符数组相等这一块,不知道是不是,我打印了a和b的值显示的都是一个固定数字我很郁闷,不知道问题怎么造成的。我估计应该是我用的语法问题或者选择的函数或者说判断的算法不对。

[ 本帖最后由 wanglianyi1 于 2015-7-20 11:49 编辑 ]
2015-07-20 11:48
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 6楼 TonyDeng
嗯,我还疏忽一个问题,这个是在我之前写的一个计算器的基础上修改的。后面输入结果C的格式没有修改对。

现在这个只能个位数运算,而且还不能是出现C是两位数的现象。我就先弄个最最简单的,就是尝试下思路,不合适了,后面再慢慢改。

我现在就是在上班之余空闲的时候琢磨下,所以有的地方很仓促,考虑不细致,只能慢慢完善,就是通过这样来多学点函数的用法。

我再多考虑考虑,谢谢你哈

没午休么?一会准备休息下,下午还好多事情做,忙完了再来搞这个。

[ 本帖最后由 wanglianyi1 于 2015-7-20 12:01 编辑 ]
2015-07-20 11:56
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 5楼 TonyDeng
不是啊,是在网上下的pdf文件:C语言入门经典(第四版).(美)霍顿.pdf,估计这个也是很老的文件了,很多知识和现在的C标准有点出入感觉。

[ 本帖最后由 wanglianyi1 于 2015-7-20 12:03 编辑 ]
2015-07-20 12:02
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 9楼 TonyDeng
第六章,字符串和文本的应用
2015-07-20 12:31
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 11楼 我爱吃青菜
嗯,我改了str长度6,后面都是int,之前是在原来写的一个计算器上改的,所以有的变量声明类型忘记改了。

现在这个就算改对了也只能适应个位数的运算,而且结果也只能是个位数的。就是为了熟悉熟悉一些函数的用法。

现在主要问题是判断玩字符串相等,然后赋值给a这个位置不对,不知道啥问题造成的。后面的b同样问题。不管输入英文数字是几,
a和b的值都固定是:1094795585;不知道什么鬼。。

for(j=0;j<10;j++)    //循环判断输入的英文字符对应数字并赋值给a   
            {                //此段有点问题a得到的值不正确,固定数字
                if(strcmp(str1,string[j])==0)
                    a=j;              
            }
        printf("a=%d",a);             //验证第一个英文数字是否对应数字
2015-07-20 12:56
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 12楼 wanglianyi1
输入字符串我本来想用的gets,但是考虑如果输入超过str长度不就出问题了嘛,就弄了个循环用scanf一个一个字符输入
2015-07-20 12:57
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 13楼 wanglianyi1
if这句strcmp判断两个字符串相等不知道对不对,用的,两个相等返回值是0吧,前大后小的话>0,前小后大是小于<0。对的吧?
2015-07-20 12:59
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 16楼 TonyDeng
哦,用循环控制输入的个数也会溢出么?
就是不太明白为啥判断两个字符串相等后,a和b的值不是对应的字符串数组的下标,而且一个固定的数字,而且很大的数字。。

[ 本帖最后由 wanglianyi1 于 2015-7-20 13:02 编辑 ]
2015-07-20 13:00
快速回复:对于输入英文数字(one+two这样)进行数学运算输出three的后续
数据加载中...
 
   



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

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