22

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

$ ./axy

x 和 y 的乘积

x 和 y 之和

我用过int main(int argc, char *argv[])。我试图分配argv[2]toxargv[3]to y,但是当我编译程序时,它说分配从指针中生成整数而不进行强制转换。这是什么意思,我该如何解决?

4

7 回答 7

56

假设 C 语言:

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

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

于 2009-02-07T06:12:07.767 回答
29

假设您使用的是 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!
 }

希望这可以帮助。

于 2009-02-07T06:14:59.117 回答
5

首先,如果你运行你的 C 程序

./axy

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

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

祝你好运!

于 2009-02-07T08:01:00.947 回答
4

我的代码看起来像这样。

#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);
}

在此处输入图像描述

于 2017-10-30T16:33:55.897 回答
1
int arg1 = argv[1];

将不起作用,因为它是一个指针数组,其中包含 的所有地址argv[0]....argv[n]以获取 的值argv[..]假设argv[1]您必须编写:

int n=*argv[1]-'0'; // Direct atoi 
于 2017-09-13T14:38:22.347 回答
1

只需使用 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”。

于 2021-08-05T06:49:29.003 回答
0

在命令行参数中,char*argv[] 是字符串类型。我们需要将其转换为整数。我们通过类型转换来做到这一点,但在 oop 中,我们通过 atoi 函数(方法)来做到这一点,它的工作方式类似于类型转换(意味着将一种数据类型转换为另一种数据类型的方法)

于 2016-05-11T20:28:30.200 回答