#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int arg, char**arv)
{
//arg = 4;
//arv[0] = "D:\\工程\\main函数的参数\\Debug\\main函数的参数.exe";
//arv[1] = "90";
//arv[2] = "/";
//arv[3] = "3";
//第一个参数为程序路径,如果只有一个参数则提示用户并退出
if (arg < 2)
{
puts("请输入如(main函数的参数 a + b)的格式");
return -1;
}
int i = 1;
char s[100] = { 0 };
while (i<arg)
{
strcat(s, arv[i]);//将输入的多条参数拼接到一个字符串数组中待下一步操作
++i;
}
char p[1] = {' '};
i = 0;
while (s[i])
{
if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')
{
p[0] = s[i];//在字符数组中获取运算符号
break;
}
++i;
}
//在字符数组中获取运算符号前后的字符并转化成数字
i = 0;
char seps[] = "'+''-''*''/'";
char *token;
token = strtok(s, seps);
double j[2] = { 0 };
while (token != NULL)
{
j[i++] = atof((const char*)token);
token = strtok(NULL, seps); // Get next token:
}
//进行相应的运算
switch (char c = p[0])
{
case '+':
printf("%0.3f", j[0] + j[1]);
break;
case '-':
printf("%0.3f", j[0] - j[1]);
break;
case '*':
printf("%0.3f", j[0] * j[1]);
break;
case '/':
printf("%0.3f", j[0] / j[1]);
break;
}
return 0;
}
吕鑫老师的写法大概是这样的:
double Calc(char*p)
{
char *result = NULL;
double left = atof(p);
result = strpbrk(p, "+-*/");
if (!result)
{
printf("请输入如(main函数的参数 a + b)的格式");
return -1;
}
double right = atof(++result);
switch (*(--result))
{
case '+':
return left + right;
break;
case '-':
return left - right;
break;
case '*':
return left * right;
break;
case '/':
return left / right;
break;
}
return -1;
}
int main(int arg, char**arv)
{
if (arg < 2)
{
puts("请输入如(main函数的参数 a + b)的格式");
return -1;
}
char s[50] = { 0 };
int i = 1;
while (arv[i])
strcat(s, arv[i++]);
double result = Calc(s);
printf("%0.2lf", result);
return 0;
}