繁体   English   中英

警告:指针和整数之间的比较? 逻辑错误?

[英]Warning: Comparison between pointer and integer? Logic Errors?

我正在尝试编写一个使用C验证区号的程序。用户输入区号,然后程序检查该区号是否有效。 我正在用数组做到这一点。 当我运行程序并输入有效的区号时,我得到返回“无效的区号”。 我认为我的逻辑有问题。

同样在编译时我得到warning: comparison between pointer and integer

我该如何解决?

这是我的代码:

#include <stdio.h>

int main()
{
    int codeToCheck[4] = {303, 720, 970, 719};
    int codeToFind = 0;
    int i = 0;

    printf("Enter an area code to validate: ");
    scanf("%d", &codeToFind);

    for(i = 1; i <= 4; i++)
    {
        codeToCheck[i] = codeToFind;
        if(codeToFind == codeToCheck)
            break; 

    }

    if(codeToFind == codeToCheck)
        printf("\nValid Area Code in Colorado!");
    else
        printf("\nInvalid Area Code in Colorado");

    return 0;
}

问题出在您的if(codeToFind == codeToCheck)语句上,在这里,您正在使用数组的基地址检查整数值。

if(codeToFind == codeToCheck) //Correct comparison of array elements is codeTofind == codeToCheck[i]

同样,您的核心逻辑也不正确,在您发布的代码中, if的条件始终为true,因为在上面的语句中, if您要为codeToCheck[i]分配codeToFind值,则在下一行中,您将比较相同的值!

您可以像这样更正代码以获得正确的输出

 int flag = 0;
 for(i = 0; i <= 4; i++)  //You should also correct this line, array indices always starts from 0
    {
        if(codeToFind[i] == codeToCheck) 
        {
            flag = 1;
            break; 
        }
    }

    if(flag)
        printf("\nValid Area Code in Colorado!");
    else
        printf("\nInvalid Area Code in Colorado");

警告是由于if(codeToFind == codeToCheck)在此处将整数与数组第一个元素的基地址进行比较。

请记住,数组的名称会衰减为其第一个元素的指针。

您的意思是在if语句中使用codeToCheck[i]而不是codeToCheck

if(codeToFind == codeToCheck[i])

同样,前一条语句的赋值将使比较始终为真。 您可能也不想这样做。

您的for循环的边界也不正确。 您当前对i将访问codeToCheck[4] ,这超出了限制。

试试这个=-

#include <stdio.h>

int main()
{
    int codeToCheck[4] = {303, 720, 970, 719};
    int codeToFind = 0;
    int i = 0;
    int flag=0;

   printf("Enter an area code to validate: ");
   scanf("%d", &codeToFind);

  for(i = 0; i < 4; i++)
   {
      if(codeToFind == codeToCheck[i])
       {flag=1;
      break; 
       }

   }

   if(flag==1)
      printf("\nValid Area Code in Colorado!");
   else
      printf("\nInvalid Area Code in Colorado");

   return 0; 

}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM