本帖最后由 人造人 于 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
请输入:
|