|
发表于 2016-6-10 18:57:54
|
显示全部楼层
本帖最后由 人造人 于 2016-6-10 19:00 编辑
我还是不了解题目,以下代码实现了部分功能
我简单解释一下
在main函数中一直循环输入,数据存放在 char buff[BUFF_COUNT][BUFF_MAX];
当输入是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[BUFF_COUNT][BUFF_MAX];
- int buff_count = 0;
- int main(void)
- {
- while(1)
- {
- if(buff_count >= BUFF_MAX) exit(1); // 超出缓冲区,退出
- printf("请输入:");
- fgets(buff[buff_count++], BUFF_MAX, stdin);
- if(strncmp(buff[buff_count - 1], "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[i], "X", 1) == 0)
- {
- char *p = buff[i];
- printf("%lf\n", atof(++p)); // ++p 后,指向字母后面的值
- }
- else if(strncmp(buff[i], "Z", 1) == 0)
- {
- char *p = buff[i];
- printf("%lf\n", atof(++p));
- }
- else if(strncmp(buff[i], "U", 1) == 0)
- {
- }
- else if(strncmp(buff[i], "W", 1) == 0)
- {
- }
- else if(strncmp(buff[i], "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
请输入:
|
评分
-
参与人数 1 | 荣誉 +1 |
鱼币 +5 |
贡献 +1 |
收起
理由
|
晚起鸟儿
| + 1 |
+ 5 |
+ 1 |
虽然不是我想要的,谢谢您的帮助 |
查看全部评分
|