一.main函数参数解析
1.main函数的原型
int main(int argc,char *argv[],char *envp[])
{
program-statements
}
2.各个参数
1.第一个参数:argc
argc是一个整型变量,表示命令行参数的个数(含第一个参数)。
2.第二个参数:argv
argv是一个字符指针的数组,每一个元素是一个字符指针,指向一个字符串。这些字符串就是命令行中的每一个参数(字符串)。
argv数组中的第一个元素指向的是可执行程序的名称。最后一个元素为空指针(NULL),空指针表示数组结束。
3.第三个参数:envp
envp是一个字符指针的数组,数组的每一个元素是指向一个环境变量(字符串)的字符指针。
envp的最后一个元素为空指针(NULL)。
二.通过命令行参数实现简易计算器
1.题目要求
使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
例如:命令行参数输入:test.exe -a 1 2
执行1+2输出3
2.具体代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int Add(int x, int y)//加法
{
return x + y;
}
int Sub(int x, int y)//减法
{
return x - y;
}
int Mul(int x, int y)//乘法
{
return x * y;
}
int Div(int x, int y)//除法
{
return x / y;
}
int main(int argc,char* argv[],char* envp[])
{
int ret = 0;
if (argc != 4)//判断参数是否有误
{
printf("参数有误:argc=%d\n", argc);
return 0;
}
switch (*(argv[1] + 1))//判断参数部分是要执行什么计算
{
case 'a':
//输入的命令行参数为字符
//所以这里需要将两个参数变为对应的整型(atoi函数)
ret = Add(atoi(argv[2]), atoi(argv[3]));
break;
case 's':
ret = Sub(atoi(argv[2]), atoi(argv[3]));
break;
case 'm':
ret = Mul(atoi(argv[2]), atoi(argv[3]));
break;
case 'd':
ret = Div(atoi(argv[2]), atoi(argv[3]));
break;
}
printf("%d\n", ret);
system("pause");
return 0;
}