晚起鸟儿 发表于 2016-6-9 14:32:58

vc++6.0识别运算问题请教

请帮忙写个程序,识别出输入的大写字母并运用字母后面的double值数据进行运算(输入字母顺序不分先后),
前面两行系统检测到输入的是X或Z,直接原样打印,第三行
U和W分别对应X加U后面的数值和Z加W后面的数值(比如第二组前面X50 ,后面U10就50+10,打印出X60 )
输入这三组测试,后两组数值打印出的计算结果和第一组相同,并且可一直无限输入,键入大写Q并回车开始运算并打印出结果

第一组
X50
Z30
X60 Z20

第二组
X50
Z30
U10 W-10

第三组
X50
Z30
U10 Z20

这三组数值为了阐述问题随机写的,如果输入的数值前面没有大写字母要打印出错误,然后在下一行重新输入,要输入任何数值都通用哦

人造人 发表于 2016-6-9 18:52:37

是我的理解能力太差吗?我无法理解你的题目

晚起鸟儿 发表于 2016-6-9 21:16:39

人造人 发表于 2016-6-9 18:52
是我的理解能力太差吗?我无法理解你的题目

是我没讲清楚,不好阐述,请问哪句不能理解呢?就是可以输入大写字母XZUW,每个字母后面带数据,然后根据输入的字母直接打印或用字母后的数据进行相应的运算并打印出结果~

人造人 发表于 2016-6-9 21:37:49

晚起鸟儿 发表于 2016-6-9 21:16
是我没讲清楚,不好阐述,请问哪句不能理解呢?就是可以输入大写字母XZUW,每个字母后面带数据,然后根据 ...

用字母后的数据进行相应的运算并打印出结果

晚起鸟儿 发表于 2016-6-9 22:24:24

人造人 发表于 2016-6-9 21:37
用字母后的数据进行相应的运算并打印出结果

当输入的是X或Z时直接打印,比如输入X20.03就打印出X20.03,后面一行再输入个U10,,第一行依然输出X20.03,第二行就把它们相加输出X30.03,这样能看明白么~因为我是数控车操作工,这个其实就是最简单的程序中的两段,把增量转化成绝对值输出,我是希望用C语言实现简单输入尺寸数据,通过较复杂的运算将计算结果打印出来~

人造人 发表于 2016-6-10 18:57:54

本帖最后由 人造人 于 2016-6-10 19:00 编辑

我还是不了解题目,以下代码实现了部分功能

我简单解释一下
在main函数中一直循环输入,数据存放在 char buff;
当输入是Q时,执行计算,完成后复位 buff_count,进行下一次计算

calc 函数中把结果打印出来
用atof 函数把字符串转换成 double
strncmp 比较字符串前面的字母

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define BUFF_MAX 10
#define BUFF_COUNT 20

void calc(void);

char buff;
int buff_count = 0;

int main(void)
{

      while(1)
      {

                if(buff_count >= BUFF_MAX) exit(1); // 超出缓冲区,退出
                printf("请输入:");
                fgets(buff, BUFF_MAX, stdin);

                if(strncmp(buff, "Q", 1) == 0)
                {
                        calc();
                        buff_count = 0; // 复位
                }

      }

      return 0;
}

void calc(void)
{
      int i;
      double value;

      for(i = 0; i < buff_count; i++)
      {

                if(strncmp(buff, "X", 1) == 0)
                {
                        char *p = buff;

                        printf("%lf\n", atof(++p)); // ++p 后,指向字母后面的值
                }
                else if(strncmp(buff, "Z", 1) == 0)
                {
                        char *p = buff;

                        printf("%lf\n", atof(++p));
                }
                else if(strncmp(buff, "U", 1) == 0)
                {

                }
                else if(strncmp(buff, "W", 1) == 0)
                {

                }
                else if(strncmp(buff, "Q", 1) == 0) // 这里是最后输入的 Q
                {

                }
                else
                {
                        printf("error\n");
                }
      }
}


$ ./a.out
请输入:Q
请输入:X123.12
请输入:Z45.35
请输入:X45.01
请输入:X
请输入:45
请输入:Z
请输入:Q
123.120000
45.350000
45.010000
0.000000
error
0.000000
请输入:45
请输入:Z78
请输入:X45.3
请输入:bcd
请输入:Q
error
78.000000
45.300000
error
请输入:

屁哥 发表于 2016-6-12 07:37:01

麻烦师兄帮忙看看 悬赏问题 里这个 Vbox 增强工具箱安装失败问题

Stopping VirtualBox Additions这个鬼{:10_266:}

3Q

flyskyltq 发表于 2016-6-16 13:27:57

看看,学习下

flyskyltq 发表于 2016-6-16 13:28:41

拿点鱼币

小布点^^ 发表于 2016-6-27 21:29:48

{:5_90:}

xhbsingle 发表于 2016-6-28 10:16:34

学习

玛尔珈尼斯 发表于 2016-6-28 12:13:26

我来看看
页: [1]
查看完整版本: vc++6.0识别运算问题请教