2015-05-08 121 views
0

我正在尝试编写一个程序来验证使用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; 
} 
+0

你的for循环应该从0到4,而且你不能比较'如果(codeToFind == codeToCheck)'因为codeToCheck是一个数组, codeToFind是整数 – inquisitive

+0

在'C'数组索引从'0'开始,你应该运行for循环从'0'到'3'。像'for(i = 0; i <4; i ++)' – Himanshu

回答

0

警告是由于if(codeToFind == codeToCheck)你在哪里比较阵列的第一元件的基址的整数。

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

0

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

if(codeToFind == codeToCheck[i]) 

同样在前面的语句分配将作出比较总是如此。你可能不想这样做。

您的for循环也有不正确的界限。您目前的界限为i将访问codeToCheck[4],这是超出界限。

0

试试这个= -

#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; 

} 
} 
+0

@Dayalrai:谢谢你指出。 OP在两个地方犯了这个错误,我在一个地方纠正,在另一个地方忘了。 – inquisitive

+1

它将始终打印科罗拉多州的有效地区代码! – prince

+0

@prince:已更正。 – inquisitive

1

问题是与你的if(codeToFind == codeToCheck)说法,在这里你正在检查与阵列的基地址的整数值。

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

而且你的核心逻辑是不正确的, 在您发布的代码里面if条件将永远是正确的,因为在if上面你与codeToFind值分配codeToCheck[i]的声明,并在下一行你正在比较相同的值!

您可以纠正你这样的代码正确输出

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"); 
相关问题