main函数命令行参数的使用
总览
一个程序的main()函数的可以包括两个参数
第一个参数的类型为int型;
第二个参数为字符串数组。
通常情况下,将第一个参数命名为argc,第二个参数为argv(当然参数名字可以换)。由于字符串数组有两种表达方式,因此,main函数存在两种书写方法:
形式一:
int main(int argc, char* argv[])//这里使用char* argv[]
{
return 0;
}
形式二:
int main(int argc, char** argv)//这里使用char ** argv
{
return 0;
}
使用方法
-
参数的含义
int argc:表示字符串的数量 argc=1+用户输入的字符串数目,操作系统负责计算数量,程序员不用管,只需要正确使用即可,例如用户输入2个字符串,argc=1+2=3;char* argv[]:字符串的数组,即多个字符串,形式如下:
-
argv[0]=可执行文件名称,例如test.exe(非用户输入,操作系统根据可执行文件名称自动生成) argv[1]= 字符串1 argv[2]=字符串2 argv[3]=字符串3
需要传入哪些参数?
两个参数作为函数的形参,需要从某个神秘的人传入参数,负责这件事的就是操作系统;那么作为使用者需要输入哪些参数呢?第一个参数 int argc 不用管!!!!操作系统会自动根据第二个参数传入数字;
若用户输入N个字符串,那么argc= N + 1;第二参数为用户输入的一系列字符串,字符串之间以空格间隔,形式为:
字符串1 字符串2 字符串3
注意:操作系统会自动加入一条字符串(程序名称)到字符串数组中,因此,最终的字符串数数组长度为N+1。在代码编码使用字符串内容时,需要注意字符串的索引号
注意: 最终操作系统存储的字符串数组为, argv[0]=可执行文件名称,例如test.exe argv[1]= 字符串1 argv[2]=字符串2 argv[3]=字符串3 如果要使用用户输入的第一个字符串 应该是argv[1],而非argv[0]
代码编写时怎么使用
代码编码人员只要弄懂两个参数的含义,在使用时牢牢把握参数的类型。第一个参数为整型,第二个参数为字符串数组。若参数类型不满足程序最终的类型,就要进行类型转换,主要表现在字符串和数字之间的转换,例如将字符串 argv[1]=”21321”转换为整型变量,可以使用 int temp=atoi(argv[1]);
//一个依赖命令行参数的的加减计算器控制台程序 int main(int argc,char* argtest[]) { cout << "总共有 " << argc << " 个参数" << endl; for (int i = 0; i < argc; ++i) { cout << argtest[i] << endl; } system("pause"); if (argc != 4) { printf("输入参数有误"); return 0; } if ((**(argv + 1)) == '-') { switch (*(*(argv + 1) + 1))//等效于*(argv[1] + 1) { case 'a': printf("%d\n", atoi(argv[2]) + atoi(argv[3])); break; case 's': printf("%d\n", atoi(argv[2]) - atoi(argv[3])); break; case 'm': printf("%d\n", atoi(argv[2]) * atoi(argv[3])); break; case 'd': printf("%d\n", atoi(argv[2]) / atoi(argv[3])); break; default: printf("无此命令,请重新运行\n"); break; } } return 0; }
编程模式下输入方法
如果正在visual studio这种平台下进行程序的编写,调试时可以打开项目的属性窗口进行参数输入,参数之间空格相隔:
-
在VS中:调试--IO_file属性---调试----命令参数中修改即可
-
-
用户在cmd窗口输入方法
打开cmd窗口后,将可执行文件拖入窗口,根据程序要求的符串数量输入字符串,并以空格分开各个字符串,输入结束后回车即可。