main函数的参数解析及实现整数计算器
main函数的参数解析及实现整数计算器
我们平时在使用main函数的时候是很少注意main函数的参数,但实际上main函数是有参数的,main函数是由系统调用,在调用的同时传参。
main函数的参数原型:
int main(int argc, char *argv[ ], char* envp[ ])
{
program-statements
}
那这里有三个参数的:
第一个参数: argc是个整形变量,是 argument count的缩写,表示传入main函数的参数个数,包含第一个参数;
第二个参数: argv是个字符指针的数组,是argument vector的缩写,首先char*argv[]是一个数组,是一个存放字符指针的数组,每个指针指向一个字符串,这里指向的是main函数传入的参数;而且第一个函数argv[0]指向的是可执行程序名称,并且包含了程序所在的完整路径,所以我们输入的参数是argc-1个;
第三个参数: envp是字符指针的数组,数组的每个元素是指向环境变量(字符串)的字符指针;
假设我们写了如下代码:
#include<stdio.h>
int main(int argc, char*argv[], char*envp[])
{
int i = 0;
for (i = 0; i < argc; i++)
{
printf("%s\n", argv[i]);
}
return 0;
}
我们现在在命令行输入两个参数:
我们来看下输出结果:
当我们运行可执行程序的时候加入参数“你好”“我的兄弟”两个参数的时候,产生的结果如上图。
再结合代码我们可以这样解释:
这个时候应该特别注意 argv 最后一个元素存放的是NULL。
第三个参数的解释
请看这段代码:
#include<stdio.h>
int main(int argc, char*argv[], char*envp[])
{
int i = 0;
while (envp[i]!=NULL)
{
printf("%s\n", envp[i]);
i++;
}
return 0;
}
运行结果:
结果显示的都是环境变量。
注:envp数组最后一个元素也存放NULL指针。
应用:
使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
例如:命令行参数输入:test.exe -a 1 2
执行1+2输出3
#include<stdio.h>
#include<stdlib.h>
int Add(int a, int b)
{
return a + b;
}
int Sub(int a, int b)
{
return a - b;
}
int Mul(int a, int b)
{
return a * b;
}
int Div(int a, int b)
{
if (0 == b)
{
printf("错误,不能除以0 \n");
}
return a / b;
}
int main(int argc, char*argv[], char*envp[])
{
int ret = 0;
//如果在传参的时候个数参数错了,就直接结束掉程序
if (argc != 4)
{
printf("参数错误\n");
return 0;
}
//switch case 语句 后面跟的必须是常量 不能是字符串
//所以我们必须找到-后面的字符 argv[1]指向的是argv这个数组第二行的地址,而第二行第二个字符就是我们需要的字符
switch (argv[1][1])
{
//我们在输入参数的时候输入的是_a,_s,_m,_d字符串,但真正决定调用哪一个函数的是第二个字符,也就是a,s,m,d
case 'a':
//argv[2]存的是字符指针,我们传过去的参数应该是整形,所以用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;
default:
printf("输入错误\n");
break;
}
printf("%d\n", ret);
return 0;
}
我们如果写入参数为-m,10,15.
运行结果:
显而易见,结果正确。
如果有错误请留言。
上一篇: 关于opencv基础的设置的笔记
推荐阅读
-
Python def函数的定义、使用及参数传递实现代码
-
关于int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试
-
关于int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试
-
main函数的参数解析
-
关于int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试
-
main函数的参数解析及实现整数计算器
-
[C语言][面试题]使用main函数的参数,实现一个整数计算机,程序可以接受三个参数
-
c语言:使用main函数的参数,实现一个整数计算器
-
Python def函数的定义、使用及参数传递实现代码
-
Python def函数的定义、使用及参数传递实现代码