如何在argv

时间:2016-02-14 19:57:32

标签: c printf

我想从命令行获取输入,(n)但我的代码只是编写这个进度条。我无法弄清楚如何打印像Enter a value之类的语句,然后获取该值并使用它运行程序。我试过把它放到很多不同的地方。有什么建议?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>

int main(int argc, char *argv[]) {
    //Check command line
    if (argc != 2) {
        printf("Usage: progress n\n");
        return 1;
    }

    int n = atoi(argv[1]);
    time_t c = atoi(argv[1]);
    int go = atoi(argv[1]);

    if (argc == 2) {
        //sscanf(argv[1], "%d", &n);
        time(&c);
        n = 10;
        go = n + c;

        char display[70];
        char equals[70];
        char disp[70];

        for (int i = 0; i <= go * n; i++) {
            strcpy(display, "progress: |");
            strcat(equals, "=");
            strcpy(disp, "|");

            char number[70];
            char space[70];

            sscanf(argv[1], "%d", &n);
            sprintf(number, "  %d%%", i * 2);
            sprintf(space, "%-52s", equals); // this keeps the 2nd bar static
            strcat(display, space);

            strcat(display, disp);
            strcat(display, number);
            //This is the final output
            fprintf(stderr, "\r%s %d  \r%s", equals, i, display);

            usleep(1000000);
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

要将表示数字的命令行参数字符串argv[1]转换为int n,您可以使用以下任何一种:

  • n = atoi(argv[1]);这个对于基数为10的数字很简单。

  • n = strtol(argv[1], NULL, 10);这个可以用来解析后缀或检查参数是否真的是一个数字。它可以支持其他基础或八进制和十六进制语法。

  • n = 0; sscanf(argv[1], "%d", &n);此方法也可以使用,但必须初始化n或必须检查sscanf返回值以避免非数字字符串参数的未定义行为。

这些方法在处理非数值和超出范围值方面存在微妙差异。

您可以将atoi()用于您的目的。

如果您的程序应该使用3个命令行参数,则必须在命令行上传递它们。要运行该程序,请打开CMD.EXE上的Windows终端或linux上的终端窗口,将当前目录更改为可执行文件的目录并键入:

C:\Project\Myproject> Myproject 123 456 789

或者在Linux或Mac / OS上:

user@mylaptop:~/projects/myproject > ./myproject 123 456 789

main函数的开头,检查命令行参数的最小数量:

 if (argc < 3 + 2) {
     printf("missing arguments: expected n c and go\n");
     return 1;
 }

并将每个参数转换为相应的变量:

 int n = atoi(argv[1]);    // first argument is the value of n
 time_t c = atoi(argv[2]); // second argument is the value of c
 int go = atoi(argv[3]);   // third argument is the value of go