如何使它在程序运行之前读取任何两个整数输入?我希望输出看起来像这样,其中 x 和 y 是输入的任何变量(我使用的是 Cygwin):
$ ./axy
x 和 y 的乘积
x 和 y 之和
我用过int main(int argc, char *argv[])
。我试图分配argv[2]
tox
和argv[3]
to y
,但是当我编译程序时,它说分配从指针中生成整数而不进行强制转换。这是什么意思,我该如何解决?
如何使它在程序运行之前读取任何两个整数输入?我希望输出看起来像这样,其中 x 和 y 是输入的任何变量(我使用的是 Cygwin):
$ ./axy
x 和 y 的乘积
x 和 y 之和
我用过int main(int argc, char *argv[])
。我试图分配argv[2]
tox
和argv[3]
to y
,但是当我编译程序时,它说分配从指针中生成整数而不进行强制转换。这是什么意思,我该如何解决?
假设 C 语言:
[试图教你钓鱼,而不是提供鱼。祝你好运!]
假设您使用的是 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!
}
希望这可以帮助。
首先,如果你运行你的 C 程序
./axy
那么 a 是 argv[0],x 是 argv[1],y 是 argv[2],因为 C 数组是基于 0 的(即数组中的第一项索引为 0。
意识到 argv 是一个字符串指针的数组(或者我一直认为它是一个 ARGument 向量,尽管您可能认为它是一个 ARGument 值的数组)。因此,您需要将字符串转换为整数。幸运的是,C 具有将 ASCII 转换为整数的库函数。查看 stdlib.h 文档。
祝你好运!
我的代码看起来像这样。
#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);
}
int arg1 = argv[1];
将不起作用,因为它是一个指针数组,其中包含 的所有地址argv[0]....argv[n]
以获取 的值argv[..]
假设argv[1]
您必须编写:
int n=*argv[1]-'0'; // Direct atoi
只需使用 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”。
在命令行参数中,char*argv[] 是字符串类型。我们需要将其转换为整数。我们通过类型转换来做到这一点,但在 oop 中,我们通过 atoi 函数(方法)来做到这一点,它的工作方式类似于类型转换(意味着将一种数据类型转换为另一种数据类型的方法)