指针和整数比较警告C.

时间:2016-11-12 23:32:16

标签: c string

对于最大的-l和最小的-s,如果用户输入无效选项,程序应显示错误消息。我必须编码功能。

当前错误是第一个和第二个if()语句中指针和整数的比较。

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

int main(int argc, char *numbers[])
{
        //variables needed
        int i,temp,max,min;

        //find largest (-1)
        if (!(strcmp(numbers[1],"-1")))
        {
            max = atoi(numbers[2]);
            for (i=2;i<argc;i++)
            {
                    if(numbers[i] >= 'a' && numbers[i] <= 'z')
                    {
                            printf("bad input");
                    }
                    else if(numbers[i] >= 'A' && numbers[i] <= 'Z')
                    {
                            printf("bad input");
                    }
                    else
                    {
                            temp = atoi(numbers[i]);
                            if (max<temp)
                            {
                                    max = temp;
                            }
                    }
            }
            //output after loop
            printf("\nThe largest number is %d\n",max);

    }
    else if (!(strcmp(numbers[1],"-s")))
    {
            min = atoi(numbers[2]);
            for (i=2;i<argc;i++)
            {
                    temp = atoi(numbers[i]);
                    if (min>temp)
                    {
                            min = temp;
                    }
            }
            printf("\nThe smallest number is %d\n",min);
    }
    else
    {


    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

  

char * numbers []

您的numbers是一个指向char的指针数组(请注意,[]的优先级高于* - 这就是为什么它的数组为指针的原因),所以比较if(numbers[i] >= 'a' && numbers[i] <= 'z')没有意义。

您需要的是if(numbers[i][0] >= 'a' && numbers[i][0] <= 'z')。同样对于以下条件,它应该是if(numbers[i][0] >= 'A' && numbers[i][0] <= 'Z')。因为char *numbers[]是指向char的指针数组,所以numbers[i]是指向char的指针,因此可以通过numbers[i][0]

访问第一个字符

答案 1 :(得分:1)

numbers [i]是一个指针。您无法将数字[i]与单个字符进行比较。