【问题标题】:Searching for a string in a struct在结构中搜索字符串
【发布时间】:2021-01-08 08:40:56
【问题描述】:

下面的代码是跟踪我的产品成本和剩余数量的代码。我面临的问题是我无法搜索代码

if(g[n].name == search[10])

输出不断显示

“未找到项目”

我是 C 语言的初学者,希望能学到更多。请更正我的代码并将其发送到这里,以便我知道我的代码错误的原因。

#include <stdio.h>

struct product
{
    char name[10];
    int quantity;
    float costs;
};

void fn_search (struct product g[]);

int main ()
{
    int n;

    struct product g[4];

    strcpy(g[0].name,"aa1");
    g[0].quantity = 10;
    g[0].costs = 1;

    strcpy(g[1].name,"bb2");
    g[1].quantity = 10;
    g[1].costs = 2;

    strcpy(g[2].name,"bb3");
    g[2].quantity = 10;
    g[2].costs = 3;

    fn_search (g);
}

void fn_search (struct product g[10])
{
    int n;
    char search[10];
    printf("Search>> ");
    scanf("%s",&search[10]);

    for (n=0;n<4;n++)
        {
            if(g[n].name == search[10])
                {
                   printf ("\ncosts = NTD%.2f",g[n].costs);
                    printf ("\nquantity = %d\n",g[n].quantity);
                }
            else
                {
                    printf("\nItem not found.");
                    break;
                }
        }
}

【问题讨论】:

  • 要比较字符串,您必须使用strcmp()
  • 您没有与 if 语句进行字符串比较。您正在比较两个指针。
  • 即使我使用 strcmp for (n=0;n
  • 我知道这与您的问题无关。但是如果你声明char search[10],则索引是从0到9。如果你尝试使用search[10],它就会越界。
  • @Brian strcmp 将指针作为输入参数,search[10] 是字符而不是指针。

标签: c string search struct


【解决方案1】:

两个错误:

scanf 的错误使用:

scanf("%s",&search[10]);  --> scanf("%9s", search);

注意:scanf("%9s", &amp;search[0]); 也可以,但以上是常用的方式。

不正确的字符串比较:

if(g[n].name == search[10]) --> if(strcmp(g[n].name, search) == 0)

还请注意,您从未初始化 g[3],但 fn_search 会检查它。

然后这部分:

        else
            {
                printf("\nItem not found.");
                break;
            }

意味着一旦项目不匹配,您就会中断for 循环。换句话说:目前你只比较g[0]

你不想这样!在打印“未找到项目”之前检查所有项目。

所以for 循环应该更像:

for (n=0;n<4;n++)
{
    if(strcmp(g[n].name, search) == 0)
    {
        printf ("\ncosts = NTD%.2f",g[n].costs);
        printf ("\nquantity = %d\n",g[n].quantity);

        return;  // Exit function when match is found
    }
}

// When execution arrives here, there was no matching element
printf("\nItem not found.");

最后:

void fn_search (struct product g[10])
                                 ^^
                                 why ??

随便

void fn_search (struct product g[])

void fn_search (struct product *g)

【讨论】:

  • hmm,我有几个关于 // scanf("%9s", search) // 为什么我们不使用 "&" 来存储我们输入的数据的问题?非常感谢它。
  • @brian 因为您希望将扫描的数据放在一个数组中。像char search[10]; 这样的数组在函数调用中用作searc 时会自动衰减为指针(这是scanf 所期望的。你也可以这样做:&amp;search[0] 注意 - 零!!不是 10` .
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多