比较结构数组和字符串中的元素

时间:2014-08-11 02:53:51

标签: struct error-handling boolean-logic

我的代码如下。我已经从输入文件创建了一个电话簿,将其加载,读取并将文件分配给具有.fname .lname .phone的结构。我应该使用的方法将接受用户输入,然后清除缓冲区,然后将结构的特定元素与用户输入进行比较,并通过使用forloop循环遍历每个结构来检查它们是否相等。

我通过调试发现的问题是我的字符串从未显示为相等。它只是跳到“没有找到联系人”。 Ii检查并正确分配用户输入,但永远不满足布尔条件。也许我不能做contacts.lname == lastnameSearch

另外需要注意的是,第一个printf语句是验证数组的元素是否符合我的预期。我从不进入大多数内心的if语句。没有编译器错误。

代码(如果有人需要,我可以发布我的整个代码):

  else if (choice == 3)
            {
                char lastnameSearch[50];
                printf("\n\nEnter the last name of the person you are looking for.\n");
                scanf("%s", lastnameSearch);
                fgetc(stdin);
                int k=0;
                for(k=0; count>k; k++)
                {
                    printf("%s %s", contacts[k].fname, contacts[k].lname);
                    if(contacts[k].lname==lastnameSearch)
                    {
                        printf("\n\nFirst name:\t%s. \nLast Name:\t%s. \nPhone Number:\t%s.\n\n ", contacts[k].fname, contacts[k].lname, contacts[k].phone);
                    }
                }
                printf("\nContact not found.\n\n");
            }

1 个答案:

答案 0 :(得分:0)

您尝试将2个字符串值与数学比较运算符进行比较。 看看strcmp函数,它主要用于C中的字符串比较。 如果两个字符串匹配,则返回0,否则> 0或< 0,这取决于内存中字符串的ASCII值总和。

但是对于你的问题,请选择:

if (strcmp(contacts[k].lname, lastnameSearch) == 0) {
    // Match found
}
else {
    // No match
}