使用main函数的参数

  • main函数的原型:
  • int main( int argc, char *argv[ ], char *envp[ ] )
  •  {
  •       program-statements
  •  }
  • 那这里是有三个参数的。

  • 第一个参数:argc是个整型变量,表示命令行参数的个数(含第一个参数)。
  • 第二个参数:argv是个字符指针的数组,每个元素是一个字符指针,指向一个字符串。这些字符串就是命令行中的每一个参数(字符串)。
  • 第三个参数:envp是字符指针的数组,数组的每一个原元素是一个指向一个环境变量(字符串)的字符指针。

  • 题目:使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
  • 例如:输入test.exe -a 1 2
          执行1+2输出3 

  • #define _CRT_SECURE_NO_WARNINGS 0
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    static void usage(const char *proc) //手册
    {
    	printf("Usage:\r\n\t%s [-a|-s|-m|-d] x y\n\n",proc);
    }
    int my_add(int x, int y)
    {
    	return x + y;
    }
    int my_sub(int x, int y)
    {
    	return x - y;
    }
    int my_mul(int x, int y)
    {
    	return x * y;
    }
    int my_div(int x, int y)
    {
    	if (y == 0)
    	{
    		printf("div data is zero!");
    		return -1;
    	}
    	return x / y;
    }
    
    //Linux使用说明: ./cal -a 1 2
    int main(int argc, char *argv[]) //1.参数个数 2.参数数组的每个内容
    {
    	if (argc != 4) //若输入不正确,则打印手册
    	{
    		usage(argv[0]);
    		return 1;
    	}
    	int(*calp[4])(int, int) = { my_add, my_sub, my_mul, my_div }; //定义函数指针
    	int op = 0;
    	if (strcmp(argv[1], "-a") == 0) //参数,选择计算方式,在数组的内容的第二个
    	{ 
    		int op = 0;
    	}
    	else if (strcmp(argv[1], "-b") == 0)
    	{
    		int op = 1;
    	}
    	else if (strcmp(argv[1], "-m") == 0)
    	{
    		int op = 2;
    	}
    	else if (strcmp(argv[1], "-d") == 0)
    	{
    		int op = 3 ;
    	}
    	else
    	{
    		usage(argv[0]);
    		return 2;
    	}
    
    	//两参数,在数组的内容的第三和第四个
    	int x = atoi(argv[2]);  //atoi把字符串转化为整型
    	int y = atoi(argv[3]);
    
    	int ret = (calp[op])(x, y); //调用函数指针
    
    	printf("result:%d\n", ret);
    	return 0;
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值