gpt4 book ai didi

c - 在 C 中获取命令行参数?

转载 作者:太空宇宙 更新时间:2023-11-04 05:36:01 24 4
gpt4 key购买 nike

所以我是 C 的新手,正在尝试学习如何让它接受命令行输入,我输入了它,我希望它是正确的语法,我正在尝试获取它,所以你输入2 个数字,它返回将这两个数字加在一起。该程序确实可以编译,但是当我尝试运行它时,它接受了参数并且它们打印完全错误,几乎就像它们在打印内存地址一样。

这是我的代码:

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

#define TRUE 1
#define FALSE 0

int addition(int a, int b);

int main(int argc, char *argv[]) {
if(argc != 3) {
printf("You must enter 2 numbers!");
return TRUE;
}
else {
int answer = addition((int)*(argv[0]), (int)*(argv[1]));
printf("%d + %d = %d", argv[0], argv[1], answer);
return FALSE;
}
}

int addition(int a, int b) {
return a + b;
}

那我做错了什么?当我输入 2 3 时的输出是:

155 + 50 = 165

最佳答案

替换这些行:

int answer = addition((int)*(argv[0]), (int)*(argv[1]));
printf("%d + %d = %d", argv[0], argv[1], answer);

与:

int answer = addition(atoi(argv[1]), atoi(argv[2]));
printf("%d + %d = %d", atoi(argv[1]), atoi(argv[2]), answer);

正如 David Hoelzer 在另一个回答中所说,参数包含以 null 结尾的字节字符串。使用 atoi() 会将字符串转换为整数。

改用 argv[1]argv[2] 因为它们实际上将包含您输入的值。根据 ISO C 标准规范:

If the value of argc is greater than zero, the string pointed to by argv[0] represents the program name; argv[0][0] shall be the null character if the program name is not available from the host environment.

argv[0] 将包含程序的名称。

有关argv[0] 作为程序名称的更多信息可以在this StackOverflow answer 中找到。 .

关于代码,您始终可以将参数存储在这样的变量中:

int a = atoi(argv[1]);
int b = atoi(argv[2]);

然后将它们传递给您的 addition() 函数并在 printf() 部分中使用它。

关于c - 在 C 中获取命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36086932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com