如何让程序在程序运行之前读取任何两个整数输入? 我希望输出看起来像这样,x和y是输入的任何变量(我使用的是Cygwin):
$ ./a x y
x和y的乘积
x和y之和
我使用了int main(int argc, char *argv[])
。我尝试将argv[2]
分配给x
和argv[3]
分配给y
,但是当我编译程序时,它表示赋值从指针生成整数而不进行强制转换。这是什么意思,我该如何解决?
答案 0 :(得分:37)
假设C语言:
[试着教你钓鱼,而不是提供鱼。祝你好运!]
答案 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);
}
答案 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>