任务和代码:立项目add,设计一个用命令行能运行的加法器,其中加数的个数不定:
输入:add 1 3
输出 4
输入:add 1 3.1 2 6
输出 12.1
输入:add 1 3 a 6
输出:命令行中出现非法运算量!
/*
文件名:main.c
作者:小风景
完成日期:2016.7.21
问题描述:建立项目add,设计一个用命令行能运行的加法器,其中加数的个数不定:
输入:add 1 3
输出 4
输入:add 1 3.1 2 6
输出 12.1
输入:add 1 3 a 6
输出:命令行中出现非法运算量!
程序输出:
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
double TranslateInfo(char *argv);
int main(int argc,char *argv[])
{
int i = 1;
double sum = 0;
if(argc < 3) //判断传入的参数是否满足运算的最低要求
{
printf("参数不足,请检查错误!\n");
exit(1);
}
while(i < argc)
{
sum +=TranslateInfo(argv[i]);
i++;
}
printf("%d个数之和为:%f\n",argc - 1,sum);
return 0;
}
/*
函数功能:将传入的字符串转换成数字然后返回
*/
double TranslateInfo(char *argv)
{
double sum = 0;
double i = 10;
int sign = 1;
if(*argv == '-') //判断第一个字符是否是负号
{
sign *= -1;
argv++;
}
else if(*argv == '+')
{
argv++;
}
while(isdigit(*argv))
{
sum = sum * 10 + (*argv - '0');
argv++;
}
if(*argv == '.') //判断是否含小数点,如果有,则进行小数部分的运算和相加
{
argv++;
sum += (*argv - '0') / i;
i *= 10;
argv++;
}
if(*argv == '\0')
{
return sign*sum;
}
else
{
printf("命令行中含有非法运算量!\n");
exit(1);
}
}
程序运行结果:
总结:对于命令行的加法程序,需要注意的部分是对传入参数的处理,传入的参数为字符,服药需要将其转换为数字。并且需要注意字符串中可能为正数,负数,小数,因此处理时应该按照最复杂的字符串为负数并且是小数进行处理,因此转换函数的流程为:先判断正负号,然后判断正数部分,求和,判断是否有小数部分,有则进行求和,当上述部分结束后应该遇到结束符,如果没有遇到而是其他符号,说明字符串含有非法字符。