现在的位置: 首页 > 综合 > 正文

main函数的参数

2013年10月24日 ⁄ 综合 ⁄ 共 5592字 ⁄ 字号 评论关闭

 ----------------------简单的说:-----------------------

执行程序的命令行参数  
  void   main(int   argc,char   *   argv[])  
  很多程序都是需要从命令行输入参数的。如,在dos中的拷贝命令需要两个参数  
  c:/copy   file1   file2  
  argc表示参数个数,argv表示参数数组

--------------

同意楼上,但附加一点,像上边的例子c:/copy   file1   file2   argc=3,argv[0]=copy,argv[1]=file1   argv[2]=file2。

----------------

void   main(int   argc,char   *   argv[])  
  {}  
  如果执行c:/命令   参数1   参数2   ...   参数n  
  则argc=n+1,*argv[]从0到n分别指向命令到参数n。

------------------------详细--------------------

main()
函数及其参数

C++

标准允许主函数
main()
有或没有参数列表。

您能在主函数
main()
中使用一个或更多的参数。

如下是一些惯例
:
int main(int argc, char *argv[])

第一个参数
argc
,指明有多少个参数将被传递给主函数
main(),
真正的参数以字符串数组(即第
2
个参数
argv[]
)的形式来传递。每一个字符串均有自己意思。在这句法上面
,
记住
, argc
代表参数的数量
, main()
函数本身是在索引
0
为的第一参数。

所以
, argc
总是至少为
1
。它的总数是从
argv
列阵的元素数目。

这意味着
, argv[0]
的值是至关重要的。

如果用户在控制台环境中程序名称后键入含参数的指令
,
那么随后的参数将传递给
argv[1]


例如
,
如果程序名称为
main,
并且已经事先编译好了,这时如果用户键入
:
D:/MyPrograms/AConsoleApp/main 68



68
将会传递给
argv[1]

当然取决于你怎么样来编写程序了,也许你的用户将可以输入如下指令:

D:/MyPrograms/AConsoleApp/main 68 1250.50

因为参数
argv
是一些字符串,将这些字符串转换为你需要的值就是我们程序员的任务了。所以用户输入下面这样的指令:

D:/MyPrograms/AConsoleApp/main 68 1250.50

并不意味着
68
是一个整形,而
1250.50
是一个
double
,当然
C/C++
编译器为我们提供了一些转换函数,你可以用
atoi()
函数把字串
68
转换为整形。同样,你可以用
atof()
函数把字串
1250.50
转换为
double
类型


如果用户输入一个字符,值将用单引号,如果是字符传将用双引号。用这种技术,用户将被允许使用数字、字符及字符串作为程序的参数来运行程序。

1
为了演示在主函数
main()
中使用数字参数,改变上例代码如下:

#include
using namespace std;
int main(int argc, char *argv[])
{
double Operand1, Operand2, Addition;

Operand1 = atoi( argv[1] );
Operand2 = atoi( argv[2] );
Addition = Operand1 + Operand2;

cout << "/nFirst Number: " << Operand1;
cout << "/nSecond Number: " << Operand2 << endl;
cout << Operand1 << " + " << Operand2 << " = " << Addition << endl;

return 0;
}


保存文件,关闭
VC
工程,在命令行下输入
CL main.cpp
回车,这时生成了新的
main.exe
程序,再在命令行输入
main 48.52 1205
回车,你会看到如下运行结果:

----------------------------------------------

D:/MyProgram2/AConsoleApp>main 48.52 1205

First Number: 48
Second Number: 1205
48 + 1205 = 1253

D:/MyProgram2/AConsoleApp>]

-----------------------------------------------------------------

2
为了演示字符串参数情况,改变代码如下:

#include
using namespace std;

int main(int argc, char *argv[])
{
char Sentence[40];
strcpy(Sentence, argv[1]);

cout << "You typed " << Sentence<< endl;
return 0;
}

然后再
CL main.cpp
编译后输入指令
main www.czvc.com
回车后有:


---------------------------------------------

D:/MyProgram2/AConsoleApp>main www.czvc.com
You typed www.czvc.com

D:/MyProgram2/AConsoleApp>

-------------------------------------------------------------

3
最后再看一例字串和数字并用的情况,改变代码如下:

#include
using namespace std;

int main(int argc, char *argv[])
{
char FullName[40], strGender[20];
char cGender[10];
float Salary;

strcpy(FullName, argv[1]);
Salary = atof(argv[2]);
strcpy(cGender, argv[3]);

if( cGender == "m" || cGender == "M" )
strcpy(strGender, "Male");
else if( cGender == "f" || cGender == "F" )
strcpy(strGender, "Female");
else
strcpy(strGender, "Unknown Gender");


cout << "Employee Information";
cout << "/nFull Name: " << FullName;
cout << "/nGender: " << strGender;
cout << "/nSalary: " << Salary << endl;
return 0;
}

然后再
CL main.cpp
编译后输入指令
main "WWW.CZVC.COM, LOOMMAN NETWORKS" 18.52 "M"
回车后有:


-----------------------------

D:/MyProgram2/AConsoleApp>main "WWW.CZVC.COM, LOOMMAN NETWORKS" 18.52 "M"
Employee Information
Full Name: WWW.CZVC.COM, LOOMMAN NETWORKS
Gender: Unknown Gender
Salary: 18.52

-----------------------------------------

----------------------详细2---------------------






 

C程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数,是所有程
序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用
的是有参函数,则参数在调用时传递。
main()
{
...
y1=f1(x1,x2);
...
}
f1(int a,int b)
{
....
Y2=f2(x3,x4);
....
}
f2(int m,int n)
{
....
.....
}
在前面课程的学习中,对main()函数始终作为主调函数处理,也就是说,答应main()调用
其它函数并传递参数。事实上,main()函数既可以是无参函数,也可以是有参的函数。对于有
参的形式来说,就需要向其传递参数。但是其它任何函数均不能调用main()函数。当然也同样
无法向main()函数传递,只能由程序之外传递而来。这个具体的问题怎样解决呢?
我们先看一下main()函数的带参的形式:
main(argc,argv)
int argc,char *argv[];
{
.....
}
从函数参数的形式上看,包含一个整型和一个指针数组。当一个C的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件,这是可以在操作系统


下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由
系统在启动运行时传递参数了。
在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为:
命令参数1参数2....参数n¿
此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。
命令行与main()函数的参数存在如下的关系:
设命令行为:program str1 str2 str3 str4 str5
其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6],指针数组的取值情况如图6-15所示。
main函数的参数(图一)
数组的各指针分别指向一个字符串。应当引起注重的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后
才是参数。
下面用实例来说明带参数的main()函数的正确使用。
[例6-29] 利用图形库函数绘制一个变化的环。它是把一个半径为R 1的圆周分成n份,然
后以每个等分点为圆心,以R s为半径画n个圆(关于作图的具体理论本教材第9章第1节作了专
门介绍,这里只作简单分析)。利用m a i n ( )函数的带参数形式,我们可以从键盘以命令行的方
式输入R 1和R s及屏幕的背景色。
#include <graphics.h> /*包含图形库函数的头文件* /
#include <math.h>
#define pi 4.1415926
m a i n ( a r g c , a r g v )
int argc;char *argv[]; /* 定义带参数的m a i n ( ) * /
{
int x,y,r1,rs,color;
double a;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"..//bgi ")启;/动*图形工作方式*/
r1=atoi(argv[1]);/*计算基础圆半径*/
rs=atoi(argv[2]);/*计算同心圆半径*/
color=atoi(argv[3]);/*背景色*/
cleardevice();/*清除图形屏幕*/
setbkcolor(color);/*设置背景色*/
setcolor(4);/*设置图形显示颜色*/
for(a=0;a<=2*pi;a+=pi/18)/*绘制同心圆*/
{
x=r1*cos(a)+320;
y=r1*sin(a)+240;
circle(x,y,rs);/*以圆心坐标为x、y,半径为rs画圆*/
}
getch();/*等待按键继续*/
close graph();/*关闭图形工作方式*/
}
若程序名为L6-29.c,经编译、连结生成可执行文件L6-29.exe。在操作系统的环境下运行
程序,命令行方式为:
l6-29 40 20 3
则命令行与main()函数的参数有如图6-16所示的关
系。
图6-16中,argv[0]是程序名,argv[1]是r1的值,
argv[2]是rs的值,argv[3]是屏幕的背景色。
由于指针数组均存放字符串,所需的圆半径及背景
色彩通过atoi()函数转换为整型。
通过带参数的main()函数,我们可以为自己的程序设置口令,在运行程序的命令行中给出所需的口令,正确则继续,否则退出。程序图形输出如图6-17所示。
main函数的参数(图二)
[例6-30]将上述程序作修改,在程序的入口处添置密码,若给定密码正确,则显示图
形。
#include<graphics.h>
#include <math.h>
#define pi 4.1415926
m a i n ( a r g c , a r g v )
int argc;char *argv[];
{
int x,y,r1,rs,color;
double a;
int gdriver=DETECT,gmode;
if (strcmp(argv[1],"pass")!=0) 设/置* 口令的比较*/
{ printf("passWord


error!/n");
e x i t ( 0 ) ;
}
initgraph(&gdriver,&gmode,"..//bgi ");
r1=atoi(argv[2]);
rs=atoi(argv[3]);
color=atoi(argv[4]);
cleardevice();
setbkcolor(color);
setcolor(4);
for(a=0;a<=2*pi;a+=pi/18)
{
x=r1*cos(a)+320;
y=r1*sin(a)+240;
circle(x,y,rs);
}
getch();
closegraph();
}
main函数的参数(图三)
在操作系统的环境下运行程序, 命令行中增加口令“p a s s”,命令行方式为:
l6-30 pass 20 40 3
main函数的参数(图四)
指针数组的存储字符串如图6-18所示。
若给定字符串argv[1]的值是pass,则程序正确运行,否则程序退出。口令正确的情况下,显示的图形为图6-17中的一个。




抱歉!评论已关闭.