gpt4 book ai didi

c - 将参数作为来自终端的输入

转载 作者:行者123 更新时间:2023-11-30 20:11:36 25 4
gpt4 key购买 nike

这是一个函数的一部分,该函数从终端获取输入,并根据输入的内容(排序类型、要使用的排序方法的版本/变体以及数组的大小)对它们进行排序。这是我到目前为止所拥有的:

int main(int argc, char * argv[]) { //will have 3 arguments not including function name: sortingtype, version and arr size
int * arr = make_arr(argv[2], argv[3]); //[2]

if (strcmp(argv[1], "sortingtype1") == 0) {
SortingType1(arr, argv[3]); //[2][3]
}
else if (strcmp(argv[1], "sortingtype2") == 0) {
SortingType2(arr, argv[3]); //[2][3]
}
else {
return 0;
}
}

void test(){ //[1]
main("sortingtype1", "a", 10); //sortingtype, version and arr size
}

[1] 我有一个函数 test() 来模拟来自终端的输入,但我不知道它是否可以这样工作。我收到一条错误消息,指出 main 的参数太多。

[2] 无论我是否删除该测试函数,我仍然会收到有关“传递参数(带有 argv[X] 的参数) 从指针生成整数而不进行强制转换”的警告。

[3] 这些也需要是 int 类型而不是 char* 类型,我该如何更改它们?

关于如何解决这个问题有什么建议吗?我已经看到使用 sscanf 的解决方案,但更喜欢首先围绕我的技能水平使用更基本的解决方案来理解。

编辑:段错误

int * SortingType2(int * arr, int len) {
for (int i=1; i < len; i++) {
int x = arr[i];
int j = i;
while ((j > 0) && (x < arr[j-1])) {
arr[j] = arr[j-1];
j--;
}
arr[j] = x;
}
return arr;
}

int main(int argc, char * argv[]) {
int size;
if (argc > 3) size = atoi(argv[3]);

int * arr = make_arr(argv[2][0], size);

if (strcmp(argv[1], "sortingtype1") == 0) {
SortingType1(arr, size);
}
else if (strcmp(argv[1], "sortingtype2") == 0) {
SortingType2(arr, size);
}
else {
return 0;
}
}

最佳答案

argv[] 是一个字符串数组,因此如果需要整数,则需要将它们转换。最简单的方法是使用 atoi()sscanf()atoi() 位于 stdlib.h 中,sscanf() 位于 stdio.h 中。使用atoi(),您只需给它一个字符串,它就会返回一个int。使用 sscanf(),您可以提供字符串、转换说明符和变量地址,就像在 scanf() 函数中一样,不同之处在于,您在这里扫描的是字符串而不是标准输入。这是一个例子:

#include <stdio.h>   // needed for atoi()
#include <stdlib.h> // needed for sscanf()

int main(int argc, char *argv[])
{
int i = 0;
int j = 0;

/* if argv[1] exists, convert to int */
if (argc > 1)
i = atoi(argv[1]);

/* if argv[2] exists, convert to int */
if (argc > 2)
sscanf(argv[2], "%d", &j);

printf("%d -- %d\n", i, j);

return 0;
}

如果您编译此代码并执行它,您会得到,例如:

david scratch λ> ./a.out 123 456
123 -- 456

使用您的代码:

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

int main(int argc, char * argv[])
{
int size;

if (argc < 4) {
printf("Usage: %s sortingType state size\n", argv[0]);
exit(EXIT_FAILURE);
}

size = atoi(argv[3]);

int * arr = make_arr(argv[2], size);

if (strcmp(argv[1], "sortingtype1") == 0) {
SortingType1(arr, size);
}
else if (strcmp(argv[1], "sortingtype2") == 0) {
SortingType2(arr, size);
}

return 0;
}

关于c - 将参数作为来自终端的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40099389/

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