gpt4 book ai didi

将输入字符与 C 中的整数数组进行比较

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

我是 C 语言的新手,我在使用 If 语句将用户输入的字符与存储在数组中的 int 进行比较时遇到了问题。

例如:

    int i[2] = {1,2};
char input[3];
printf("Select option:");
fgets(input,3,stdin);

if(strcmp(*input,i[0]) == 0)
printf("1 chosen");
if(strcmp(*input,i[1]) == 0)
printf("2 chosen");

编译时,我收到两个比较语句的警告:

    warning: passing argument 1 of 'strcmp' makes pointer from integer without cast
warning: passing argument 2 of 'strcmp' makes pointer from integer without cast

我知道这可能是因为我在比较非字符串元素,但我将如何转换它们然后比较它们?

执行时我得到:

     Segmentation fault(core dumped)

有人可以帮忙吗?

最佳答案

除了说它是“错误的”之外,还没有人解释为什么您所做的是不正确的。

C 中的字符串只是内存中的一串连续字符,其中字符串中的最后一个字符的值为零。您可以将字符串存储在 char 数组中,或者您可以使用 char 指针 (char*) 指向内存中的某处。

当您输入十进制数时,您正在读取恰好在 '0''9' 范围内的单个字符,可能以可选的前缀'-'。您将它们作为字符串读取,如果您想将它们视为整数,则需要将它们转换为整数数据类型(而不是一系列 char 值)。

这就是 atoi 之类的东西有用的地方,尽管它不再流行了。您应该使用 strtol。 [有一整套函数用于处理 unsignedlong long 或其组合,以及 double float 类型].

这大约解决了您问题的一半。现在,您正在使用 strcmp 并期望它能正常工作。你正在做的事情有几个问题。主要错误是您不能将整数视为字符串。如果你真的想使用字符串比较,你必须将整数转换为字符串。这意味着您执行的操作与 strtol 执行的操作相反。

这是一个更大的讨论,在您的情况下,这不是正确的方法,因此我不会深入讨论。但我想指出的是,在所有条件相同的情况下,您向 strcmp 发送了错误的类型。它需要两个 char* 指针(实际上是 const char *)。您所做的是将您的 input 指针取消引用到第一个元素的 char,然后为第二个元素传递一个 int

strcmp(*input,i[0])

指针基本上只是一个数字。它给出了一些数据的内存地址。在这种情况下,数据应为 char 类型(单字节)。 strcmp 函数需要有效的内存地址(实际上在您的堆栈或堆中的东西)。但是你给它的是 *input(输入字符串中第一个字符的值)和 i[0](数字 1 ).

那些编译器警告告诉你一些非常重要的事情,你知道的! =)

因此,为了完整起见(尽管其他人已经回答了这个问题),您应该忘记字符串比较(并记下要了解更多有关 C 中的字符串的信息),然后执行此操作:

int value = strtol( input, NULL, 10 );

if( value == i[0] )
printf("1 chosen");
if( value == i[1] )
printf("2 chosen");

还有其他方法可以解决这个问题。我可以谈论如何从字符串转换一位数字,但我想我已经咆哮了足够长的时间。希望对您有所帮助。

关于将输入字符与 C 中的整数数组进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15568657/

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