C语言fopen, 带参数main函数疑问。

C语言fopen, 带参数main函数疑问。,第1张

举个例子,你在命令行下输入 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中运行时,可以通过空格来隔离输入的参数,通过下图,应该更容易理解啦。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11670322.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存