
举个例子,你在命令行下输入 notepadexe 就会打开notepad这个记事本程序,这时参数个数argc为1,argv[0]就是程序名本身
如果你输入notepadexe atxt,则参数个数argc为2,第一个参数argv[0]是程序名本身,第二个参数argv[1]是“atxt”,功能是打开记事本程序并显示文件atxt。而argv[1]才是第一个有意义的参数,所以楼上这么说也没错
从上面的说明可以看到,argc == 1时候,参数只有程序名本身,并没有有意义的参数,也就是没有输入要打开的文件名。只有 argc > 1时候,才可以认为有输入参数
如果你的程序是 mycalc, 编译成功后,你应当得到 mycalexe
在 DOS 窗 打命令 mycalexe 可运行。
如果 用 CMD:
CMD /K mycalexe
如果 加参数
CMD /K mycalexe p1 p2 p3 p4
还有一种方法就是搜索到cmdexe然后复制到你执行文件的目录下,点击运行cmd也一样就可以直接输入mycalexe 了
#include <iostreamh>
int main(int argc,char argv[])
{
for(inti=0;i<argc;i++)
{
cout<<argv[i]<<'\t'; //
}
return0;
}
/
int argc, char argv 用于运行时,把命令行参数传入主程序。
argc -- 命令行参数总个数,包括 可执行程序名。
argv[i] -- 第 i 个参数。
argv[0] -- 可执行程序名。
/
关于带参数的main函数网络收集:
int main(int argc,char argv) 这里面的argv含义··
是用来传递参数的,假如你编译成的文件名是aexe,那么在命令提示符下可以通过aexe12
34来向程序传递参数,这时两个参数就会传递到字符串数组argv中,注意此时实际传递了三个参数,第一个参数是文件名,第二个参数是12,第三个是34,而argc就是参数个数。
int argc, char argv 用于运行时,把命令行参数传入主程序。
argc -- 命令行参数 总个数,包括 可执行程序名。
argv[i] -- 第 i 个参数。
argv[0] -- 可执行程序名。
// 例如运行:
abcexe
argc 等于 1, argv[0] 是 "abcexe"
// 例如运行:
recexe 4 52
argc 等于 3, argv[0] 是 "recexe", argv[1] 是 "4", argv[2] 是 "52"
主函数里若有:
int x;
float y;
char s[80];
strcpy(s,argv[0]); // 程序名存入 了 s
sscanf(argv[1],"%d",&x); // x 得到数值4
sscanf(argv[2],"%f",&y); // y 得到数值 52
ANSI-C(C89/C99)的话main()函数有2种主要形式。
(1) int main(void)
(2) int main(int argc, char argv[])
(2)也可写成int main(int argc, char argv)
argv[argc]放空指针(NULL指针)。
argc和argv可以用别名。
另外,还有一种受系统限制的形式:
int main(int argc, char argv[], char envp[])
前两个参数同(2),第三个参数envp[]放环境变量。
这个形式很少用。
所以严格讲,
ANSI-C推荐的带参数的main()函数只有上面(2)这一种。
另外,搜集了一下C和C++中常见的几种形式:
(1) main()
(2) int main()
(3) int main(void)
(4) int main(int, char)
(5) int main(int, char[])
(6) int main(int argc, char argv)
(7) int main(int argc, char argv[])
(8) int main( int argc, char argv[], charenvp[])
(9) void main(void)
(1)是(3)的简写。不推荐使用。
(2)是(3)的简写。在C++中是正确的形式。
(3)在C和C++中都是正确的形式。推荐使用。(还有缺省int的main(void)形式)。
(4)和(5)是不用参数时的一种写法。编译器级别高时会警告。不推荐使用。
(6)是(7)的另外写法。两种都可以,凭个人爱好。
(7)是带参数的正确的形式。推荐使用。
(8)是一种很少用的写法,且受系统限制。
(9)一般不认为是正确的写法。但是在嵌入式系统中有使用(包括void main()形式)
//#include "<a href="https://wwwbaiducom/swd=stdafxh&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLPjFBrHIBnHubm1cvnWP-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRvP1c4njfkrjmzP1mYPHcd" target="_blank" class="baidu-highlight">stdafxh</a>"//<a href="https://wwwbaiducom/swd=vc%2B%2B60&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLPjFBrHIBnHubm1cvnWP-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRvP1c4njfkrjmzP1mYPHcd" target="_blank" class="baidu-highlight">vc++60</a>加上这一行
#include "<a href="https://wwwbaiducom/swd=stdioh&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLPjFBrHIBnHubm1cvnWP-0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRvP1c4njfkrjmzP1mYPHcd" target="_blank" class="baidu-highlight">stdioh</a>"
int main(void){
char name[5][15],course[3][30];
int i,j;
double score[5][6],tmp[2][6]={0};
printf("请输入5个学生的姓名:\n");
for(i=0;i<5;scanf("%s",name[i++]));
printf("请输入3门课程名:\n");
scanf("%s%s%s",course[0],course[1],course[2]);
printf("分别输入5个学生3门复种的成绩:\n");
for(i=0;i<5;i++){
printf("\t第%d个学生: ",i+1);
scanf("%lf%lf%lf",&score[i][0],&score[i][1],&score[i][2]);
score[i][3]=score[i][0]+score[i][1]+score[i][2];
score[i][4]=score[i][3]/3;
for(score[i][5]=score[i][0],j=1;j<3;j++)
if(score[i][5]<score[i][j])
score[i][5]=score[i][j];
}
for(i=0;i<5;i++)
for(j=0;j<6;j++){
tmp[0][j]+=score[i][j];
if(tmp[1][j]<score[i][j])
tmp[1][j]=score[i][j];
}
printf("-----------------------------------------------------------------\n");
printf("\t %s %s %s 总分 平均分 最高分\n",course[0],course[1],course[2]);
printf("-----------------------------------------------------------------\n");
for(i=0;i<5;i++){
printf(" %s\t ",name[i]);
for(j=0;j<6;printf("%-101f",score[i][j++]));
printf("\n");
}
printf("-----------------------------------------------------------------\n");
printf("平均分\t ");
for(i=0;i<6;printf("%-101f",tmp[0][i++]/5));
printf("\n最高分\t ");
for(i=0;i<6;printf("%-101f",tmp[1][i++]));
printf("\n-----------------------------------------------------------------\n");
return 0;
}
这是因为:主函数main并非程序的真正入口!在编译器对你的工程文件进行编译时,它是先找到你的main函数,然后根据main函数类型,把一段前缀入口程序预先编译,再让它去调用main函数当你的main函数需要参数时,它就编译有参数main函数调用,反之则编译无参数main函数调用所以编译器是自动识别你的main函数类型的!
argc表示参数的个数;第二个参数中argv[0]为自身运行目录路径和程序名,argv[1]指向第一个参数、argv[2]指向第二个参数、等等。以下面的代码为例:
#include <stdioh>int main(int argc,char argv)
{
for(int num=0; num!=argc; ++num)
printf("%s\n", argv[num]);
return 0;
}
直接编译运行上面的程序,此时argc的值是1,表示只有一个参数,实际上就是程序本身,参数argv[0]的内容即为生成程序的具体目录。
在cmd中运行时,可以通过空格来隔离输入的参数,通过下图,应该更容易理解啦。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)