C语言中虽然所有函数都是平行的,但是main函数还是有些特殊,它可以调用其它函数,但是不能被其它函数所调用,那如何调用main函数呢,可以通过命令行给main函数传参
写一个简单的加法运算器,从命令行中接受多个数值,运行后反馈它们的加和结果
int main(int argc,char *argv[])
{
.....
}
./m 12 23 .. ...求和 35
#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;
}
首先检查传进来的参数是否合法,然后想办法将参数字符串转化为对应的数值,最后对数值进行累加
原文地址
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。