c - 即使数组编号匹配,它仍然返回 false

标签 c arrays if-statement numbers match

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

这里我的函数在“findContact”函数中搜索一个确切的数字。 getTenDigitPhone 是获取电话号码的函数。 我最终得到了 * Contact 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;
    }

}

最佳答案

启用编译器的警告!它会发现你的问题。例如,使用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 (...) {

正如您目前所做的那样,忽略条件表达式的结果,然后无条件执行以下 block 。


与你的问题无关,在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;
}

关于c - 即使数组编号匹配,它仍然返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48219127/

相关文章:

c - -Ofast 的 GCC 问题?

javascript - 单击后所有图像对象在一个 css 中更改

javascript - 过滤数据数组多个值javascript

c - if 语句在 C 中不起作用

C++ if 后跟一个 for 循环 block

c - C语言读取二进制文件

Debian 上的 C 编译错误

c - gcc:错误:缺少 '-l' 的参数

arrays - 使用扫描器创建流

javascript - 如果 JavaScript 中 if block 返回,还需要 else 吗?