Blog Archive

Thursday, November 29, 2018

c/c++程序main函数参数解析,以及参数传递的不同方法




原文
1. 程序运行时传递参数的不同方法:

   1)通过命令参数传递参数; 2) 通过txt文件读取参数。

2. 方法举例

1)通过命令参数传递参数,即解析main函数的参数。

    main函数可以不带参数,也可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。所以C99标准中规定只有以下两种定义方式是正确的:
    int main(void) //无参形式
    int main(int argc, char *argv[]) //有参形式
当然有参形式可以进行演变,所以下面的写法也是正确的(同时变量名是可以更换的):
    int main(int argc, char **argv) //有参的另一种形式

#include<string.h>
#include<stdlib.h>
#include<stdio.h>
int parseOptions(int argc, char** argv, int &imgWid, int &imgHei, int &imgCnt)
{
    if(argc == 1)
        return -1;
    for (int i = 1; i < argc; i++) {
        if (strcmp(argv[i], "-w") == 0)        {
         imgWid = (int)atoi(argv[++i]);
        }        else if (strcmp(argv[i], "-h") == 0)        {
         imgHei = (int)atoi(argv[++i]);
        }        else if (strcmp(argv[i], "-c") == 0)        {
            imgCnt = (int)atoi(argv[++i]);
        }        else
            return -1;
    }
 
    return 0;
}
 
int main(int argc, char** argv){ 
    int imgWid, imgHei, imgCnt; 
    if(-1 == parseOptions(argc, argv, imgWid, imgHei, imgCnt))    {
        printf("Get parameter failed!\n");
        exit(-1);
   } 
}
运行方法为:

  a. 在vs下运行时:在工程属性的命令参数行中输入:-w 640 -h 480 -c 10 即可
  b. 在DOS下如果生成可执行文件为example.exe放在D盘内,则输入:D:example -w 640 -h 480 -c 10 即可

2)通过TXT文件读取参数

int main(int argc, char** argv)
{
 
    int imgWid, imgHei, imgCnt;
 
    FILE* srcFile = NULL;
 
    srcFile = fopen("parameter_list.txt","r");
    if (srcFile == NULL)
   {
        printf("Open parameter_list failed!\n");
        exit(-1);
    }
    while (!feof(srcFile))
  {
      fscanf(srcFile,"%d", &imgWid);
      fscanf(srcFile,"%d", &imgHei);
      fscanf(srcFile,"%d", &imgCnt);
      printf("imgWid=%d imgHei=%d imgCnt=%d\n", imgWid, imgHei, imgCnt);
      ...
   }
   ...
}
parameter_list.txt文件中的参数如下:

640 480 10
1280 720 10
1920 1080 10
3840 2160 10


--------------------- 
作者:JonFred 
来源:CSDN 

版权声明:本文为博主原创文章,转载请附上博文链接!

No comments:

Post a Comment