前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >那些年我们一起忘掉的C (十九).main函数传参

那些年我们一起忘掉的C (十九).main函数传参

作者头像
franket
发布2021-10-18 10:18:21
5180
发布2021-10-18 10:18:21
举报
文章被收录于专栏:技术杂记

前言

C语言中虽然所有函数都是平行的,但是main函数还是有些特殊,它可以调用其它函数,但是不能被其它函数所调用,那如何调用main函数呢,可以通过命令行给main函数传参


概要


给main函数传参

写一个简单的加法运算器,从命令行中接受多个数值,运行后反馈它们的加和结果

代码语言:javascript
复制
int main(int argc,char *argv[])
{
.....
}

./m 12 23 .. ...求和 35

代码注解

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int mi(int n) //定义一个根据数位反馈权值的函数,接受一个整型位数n,反馈幂值
{
	return (n==1)?1:10*mi(n-1); //反馈10的n-1次方作为权值
}

int checkarg(int n,char *parg[]) //定义一个检查参数的函数,用来确认main函数获取到的参数的合法性,接受一个整型数值和一个字符型指针数组
{
	int i; //定义一个整型变量进行循环控制
	char *p; 
	for(i=0;i<n;i++) printf("%s\n",parg[i]); //遍历所有参数并且打印,这一步是不是必要的,只是为了进行回显确认,注意,程序名也算参数中的一个,是第0号参数
	for(i=n-1;i>0;i--) //整型变量i赋初值n-1,在[n-1,1]的范围里,逐一自减进行遍历
	{
		for(p=parg[i];*p != '\0';p++) //获取一个参数字符串的首地址,然后对参数字符串进行遍历
		{
			if( *p < '0' || *p > '9') //如果出现数字字符以外的字符,就提示异常,并且退出
			{
				printf ("please reinput the number, error number %c\n",*p);
				return 0; //异常则反馈0
			}
		}
	}
	return 1; //到最后也没找到非法字符,则返回1
}

int addarg(int n,char *parg[]) //定义一个计算和的函数,接受一个整型数值和一个字符型指针数组
{
	int i,len=0,sum=0; //定义三个整型变量,i用来进行循环控制,len用来保存权重,sum用来存放累计和
	char *p;
	for(i=n-1;i>0;i--) //整型变量i赋初值n-1,在[n-1,1]的范围里,逐一自减进行遍历,在数组中对应第二个参数到最后一个参数
	{
		for(len=strlen(parg[i]),p=parg[i];*p != '\0';p++,len--) sum+= (*p-'0') * mi(len); //逐一遍历参数中的字符,转化为数值后加上权重累计到sum中进行保存
	}
	return sum; //将sum值返回
}

int main(int argc,char *argv[]) //带参数的main函数,接受一个整型数值和一个字符型指针数组,编译完成后可以直接在命令中进行使用,如 ./x.exe 12 34,在命令行中,它程序接收的其实是字符串,而非数值,这个从字符串到数值的转换需要我在代码中完成
{
	int sum=0;
	if (checkarg(argc,argv) ==0 ) return 0;  //调用checkarg对参数进行检查
	sum=addarg(argc,argv); //调用addarg进行计算
	printf("\nthe sum is: %d\n",sum);
	return sum;
}

思路

首先检查传进来的参数是否合法,然后想办法将参数字符串转化为对应的数值,最后对数值进行累加

基础知识点

  • 指针数组的用法
  • 指针数组作为main函数的形参

原文地址

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概要
    • 给main函数传参
      • 代码注解
      • 思路
      • 基础知识点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档