即使数组匹配,它仍然会返回false

时间:2018-01-12 03:25:32

标签: c arrays if-statement numbers match

您好,我目前的程序有问题。当我输入一个电话号码char,并将其与不同的电话号码char进行比较时,答案会回复为假。

这里我的函数在“findContact”函数中搜索一个确切的数字。 getTenDigitPhone是获取电话号码的功能。 我最终得到 *联系NOT FOUND * ,无论它是否匹配

void searchContacts(const struct Contact contact[], int size) {
    char phone[11];
    int searchIndexContact;
    printf("Enter the cell number for the contact: ");

    getTenDigitPhone(phone);
    searchIndexContact = findContactIndex(contact, size, phone);

    if (searchIndexContact > -1) {
        printf("\n");
        printf("Contact found:\n");
        displayContact(&contact[searchIndexContact]);


    }
    else {
        printf("*** Contact NOT FOUND ***\n");
    }
}

**这是getTenDigitPhone函数

void getTenDigitPhone(char telNum[11])
{
    int needInput = 1;

    while (needInput == 1) {
        scanf("%10s", telNum);
        clearKeyboard();

        // (String Length Function: validate entry of 10 characters)
        if (strlen(telNum) == 10)
            needInput = 0;
        else
            printf("Enter a 10-digit phone number: ");
    }
}

这是findContactIndex(以确定数字是否匹配)

int findContactIndex(const struct Contact contacts[], int size, const char cellNum[])
{

    int i;
    int value = 0;
    for (i = 0; i < size; i++) {
        if (contacts[i].numbers.cell ==  cellNum);{
            printf(" %s    %s",contacts[i].numbers.cell , cellNum);
            value == 1;

        }

    }

    if (value == 1) {
        return value;
    }
    if (value == 0) {
        return -1;
    }

}

1 个答案:

答案 0 :(得分:2)

启用编译器的警告!它会找到你的问题。例如,使用gcc,至少使用

gcc -Wall -Wextra -pedantic ...

findContactIndex

value == 1;

错了。你可能会选择

value = 1;

但它应该是

value = i;
break;

或只是

return i;

因为函数应该返回匹配的索引。这意味着

int value = 0;
...
if (value == 1) {
    return value;
}
if (value == 0) {
    return -1;
}

应该是

int value = -1;
...
return value;

或只是

return -1;

与您的问题无关,在findContactIndex

if (...);{

应该是

if (...) {

正如您目前所看到的那样,条件表达式的结果被忽略,然后无条件地执行以下块。

与您的问题无关,在findContactIndex

contacts[i].numbers.cell == cellNum

应该是

strcmp(contacts[i].numbers.cell, cellNum) == 0

您目前正在比较指针而不是字符串。

修正:

int findContactIndex(const struct Contact contacts[], int size, const char cellNum[])
{
    int i;
    for (i=0; i<size; ++i) {
        if (strcmp(contacts[i].numbers.cell, cellNum) == 0) {
            return i;
        }
    }

    return -1;
}