C问题陈述:搜索整数数组以查找第一个第一个负整数(如果存在),返回其在数组中的位置。 我知道我可以通过使用索引来实现这一点,但是,我只是想知道为什么程序不会进入if条件?即使我进行了转换,代码也永远不会进入内部。
void find_negative(int argc, char *argv[])
{
int i = 0;
//ignore the first string of arguments because it will be "./problem1.3.c"
for(i =1; i<argc;i++)
{
if(*(argv+i)==2) <-------------------------this is where I get stuck (problem)
{
printf("found it at %d location.\n", i);
}
else
{
printf("All positive.\n");
}
}
}
int main(int argc , char *argv[])
{
find_negative(argc, argv);
return 0;
}
答案 0 :(得分:2)
(argv+i)
的类型为char**
*(argv+i)
的类型为char*
。
在该行中,
if(*(argv+i)==2)
您正在尝试将char*
与2进行比较,其类型为int
。这解释了编译器错误消息。
也许您想从参数中提取一个整数并将其与2进行比较。然后,您需要使用:
if(atoi(*(argv+i))==2)
答案 1 :(得分:1)
有些注意事项:
*(argv + i)
完全等同于argv[i]
。在这个特定的代码中没有任何区别。
argv
具有类型char **
(指向char的指针),因此*(argv + i)
具有类型char *
(指向char的指针)。您将此直接与整数值2进行比较,这就是编译器为您带来悲伤的原因,因为很难将指针与整数进行比较。
将字符串"2"
与整数值2进行比较将不起作用,它们完全是不同的类型。如果程序通过命令行参数接收其输入,则应将输入解析为实际的二进制整数。
举个例子:
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
{
long value = strtol(argv[i], NULL, 10);
if (value < 0)
{
printf("Found a negative integer at position %d\n", i);
return 0;
}
}
// if we get here then there were no negative integers in the input
puts("No negative integers in input");
return 1;
}
我上面使用的函数记录为here。
答案 2 :(得分:0)
输入,argv是一个字符数组。您可能首先需要解析它并将其转换为整数数组。