如何读取数字作为命令参数?

时间:2009-02-07 05:53:22

标签: c command-line-arguments

如何让程序在程序运行之前读取任何两个整数输入? 我希望输出看起来像这样,x和y是输入的任何变量(我使用的是Cygwin):

$ ./a x y

x和y的乘积

x和y之和

我使用了int main(int argc, char *argv[])。我尝试将argv[2]分配给xargv[3]分配给y,但是当我编译程序时,它表示赋值从指针生成整数而不进行强制转换。这是什么意思,我该如何解决?

7 个答案:

答案 0 :(得分:37)

假设C语言:

  • 命令行参数可在argv数组中找到 - argv [1],argv [2]等。
  • 可以使用atoi函数将字符串参数转换为整数。
  • 可以使用printf函数完成输出。

[试着教你钓鱼,而不是提供鱼。祝你好运!]

答案 1 :(得分:20)

假设您正在使用bash,您可以对这些参数使用$ 1,$ 2等。但是,如果您使用的是C,那么代码应该看起来更像这样:

#include <stdio.h>
#include <stdlib.h>

main(int argc, char *argv[]) {
    if(argc<=1) {
        printf("You did not feed me arguments, I will die now :( ...");
        exit(1);
     }  //otherwise continue on our merry way....
     int arg1 = atoi(argv[1]);  //argv[0] is the program name
                                //atoi = ascii to int
     //Lets get a-crackin!
 }

希望这有帮助。

答案 2 :(得分:4)

首先,如果您将C程序作为

运行
  

./ a x y

然后a是argv [0],x是argv [1],y是argv [2],因为C数组是基于0的(即数组中的第一项用0索引。

意识到argv是一个数组(或者我一直认为它是一个ARGument Vector,尽管你可能会认为它是一个ARGument值数组)的字符串指针。因此,您需要将字符串转换为整数。幸运的是,C具有将ASCII转换为整数的库函数。查看stdlib.h文档。

祝你好运!

答案 3 :(得分:1)

我的代码看起来像这样。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    // argc is number of arguments given including a.out in command line
    // argv is a list of string containing command line arguments
    int total = 0;
    int i;
    char *value;
    for(i = 1; i < argc; i++)
    {
        // The integers given is read as (char *)
        value = argv[i];
        printf("Command line index: %d value: %s in ascii: %d\n", i, value, *value);

        // Convert ascii to integer.
        // atoi function is defined in stdlib.h
        total += atoi(value);
    }
    // .2f limits the decimals to two digits after '.'
    printf("Total of given integers is %d\n", total);
}

enter image description here

答案 4 :(得分:0)

在命令行参数中,char * argv []是字符串类型。我们需要将其转换为整数。我们通过类型转换来执行此操作,但是在oop中我们通过atoi函数(方法)执行此操作,它的工作方式类似于类型转换(表示将一种数据类型转换为其他数据类型的方法)

答案 5 :(得分:0)

int arg1 = argv[1];

无法正常工作,因为它是一个指针数组,其中包含argv[0]....argv[n]的所有地址,以获取argv[..]的值,假设argv[1]必须写入:

int n=*argv[1]-'0'; // Direct atoi 

答案 6 :(得分:0)

只需使用 atoi() 即可将 char 类型的控制台输入转换为 int

   int main(argc, char* argv[])
   {
      int first = atoi(argv[1]);
      printf("%i", first);
   }

如果你问为什么 argv[1] 而不是 argv[0],答案是第一个参数是你的可执行文件的名称 ./some 2 int 在这种情况下 argv[0] 将指向 'some'。< /p>