【问题标题】:Reading values from command line using flags使用标志从命令行读取值
【发布时间】:2013-10-04 02:05:28
【问题描述】:

所以我试图在击中标志后从命令区域读取值。我不想使用scanf,因为它不应该暂停。它应该接受如下参数: run -p 60 10 其中 60 是百分比值,10 是进程数。如何在不使用暂停用户输入的 scanf 的情况下将它们读入变量?我需要使用argv[2]argv[3] 为它们分配值吗?我想要整数值,而不是字符串。

这是我目前的代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>


bool Gamble(int percent);




int main(int argc, char *argv[])
{

int c;
int pflag = 0;
int vflag = 0;
int percent;
int processes;

while ((c = getopt (argc, argv, "-p-v: ")) != -1)
{
     switch (c)
       {
       case 'p':
         pflag = 1;
         percent = argv[2];
         //scanf("%d", &percent);
         break;
       case 'v':
         vflag = 1;
         break;
       default:
         processes = argv[3];
       }

}

printf("%d\n", percent);
printf("%d\n", processes);




Gamble(percent);


return 0;

}

附: Gamble 只是一个类,它接受百分比,生成一个随机数,并根据使用随机生成器是否命中通过的百分比返回“成功”或“失败”。

【问题讨论】:

  • 从文件中的一组存储行中获取下一个输入行对您有用吗?...使用 fopen,然后在每次设置标志时调用fgets(,,);。或者,如果 argv[] 保证是数字,您可以使用 atoi(n) 将每个 argv[n] 值转换为 int
  • 我在编辑最后一条评论时没时间了:你可以做类似 int x[n];然后 x[i] = atoi(argv[i]),对于 0 到 n 个参数。

标签: c command-line command-line-arguments


【解决方案1】:

您可以使用sscanf 从字符串中读取数值。

【讨论】:

  • 嗯,我一定没有正确使用它。我不断得到两个值的“0”:sscanf(argv[2],"%s %*s %d",str, &amp;percent);sscanf(argv[3],"%s %*s %d",str, &amp;processes);
  • 命令行通过argv 数组分割。例如。 argv[1] 可以是"-p"argv[2] 可以是"60"
  • argv[2] 是 60,我查过了。那不应该把"60"读成"percent"吗?还是我使用 sscanf 错误?我查了参考页面。
  • 如果argv[2] 中有 60 个,你会想要sscanf(argv[2],"%d", &amp;percent); 而不是你写的。但是,请参阅 koodawg 的回答。
【解决方案2】:

getopt 将选项值放在 optarg 中。您不想直接从 argv[] 中读取它们。请参阅如何使用 getopt 的示例

http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html

【讨论】:

    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2015-09-03
    相关资源
    最近更新 更多