main函数参数的应用(使用ubuntu环境下的g++)

前言

在ubuntu下使用g++编译器,实现在命令行输入 数量可变个参数 进行累加或求平均

本来想用变参函数的,但是不知道怎么将命令行的参数变成变参函数的参数,于是直接使用数组作为参数了。

利用知识

main函数的参数使用
int main(int argc,char* argv[])
argc:int类型,表示命令行的参数总个数
argv:char**类型,存储了命令行的全部参数
argv[0]:存储了第一个参数的字符串指针:执行文件的所在目录,
如执行当前目录下的执行文件test:  ./test 则*argv[0]=./test
如在终端输入命令行 ./test sum 1 2 3
*argv[0]=./test   *argv[1]=sum *arg[2]=1 *argv[3]=2 *argv[4]=3

功能实现过程

1、创建文件
touch test.cpp
vi test.cpp
2、写代码
#include<iostream>
#include<string>
using namespace std;

//累加函数,参数为数组个数和指向数组的指针
double sum(int count,double arr[])
{
	double sum=0.0;
	for(int i=0;i<count;i++)
			sum+=arr[i];
	return sum;
}
//求平均函数,参数为数组个数和指向数组的指针
double avg(int count,double arr[])
{
	double sum=0.0;
	for(int i=0;i<count;i++)
			sum+=arr[i];
	return sum/(count*1.0);
}
//argc:int类型,表示命令行的参数总个数
//argv:char**类型,存储了命令行的全部参数
int main(int argc,char* argv[])
{
	//获取命令行第二个参数,该参数为使用的函数名
	string str1=argv[1];
	//创建数组空间,argc-2个数,argv[0]和argv[1]为目录和函数名
	double *arr=new double[argc-2]();
	
	//获取命令行中的数组元素
	for(int i=0;i<argc-2;i++)
	{
		string sarr=argv[i+2];
		//string转double
		arr[i]=stod(sarr);
	}
	//使用sum函数
	if(str1=="sum")
	{
		cout<<"used function:---sum---"<<endl;
		double arr_sum=sum(argc-2,arr);
		cout<<"the count is "<<argc-2<<endl;
		cout<<"result:"<<arr_sum<<endl;
	}
	使用avg函数
	if(str1=="avg")
	{
		cout<<"used function:---avg---"<<endl;
		double arr_avg=avg(argc-2,arr);
		cout<<"the count is "<<argc-2<<endl;
		cout<<"result:"<<arr_avg<<endl;
	}
	cout<<"执行文件所在目录:"<<argv[0]<<endl;
	//释放空间
	delete []arr;
	arr=NULL;
	return 0;
}
3、使用g++编译器编译
g++ test.cpp -std=c++11 -o test
4、执行
输入命令   ./test sum 1 2 3
结果:6
输入命令   ./test avg 1.1 1.1 1.1 1.1 1.1 1.1
结果:1.1

在这里插入图片描述

遇到的问题

1、g++支持的c++版本问题
使用了string转化为double的函数stod(string),需要c++11
解决:编译时加入-std=c++11 即可:g++ test.cpp -std=c++11 -o test
2、数字和string类型的转化问题
string类型转化为double型函数:double stod(string str);
string类型转化为int型函数: int stoi(string str);

参考链接

main函数参数的使用

xiaozhu丶

string类型转换

发狂的蜗牛
walsons

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值