【问题标题】:How to search for multiple registers in a struct?如何在结构中搜索多个寄存器?
【发布时间】:2017-10-22 05:00:19
【问题描述】:

我有选择 2 需要修复。例如,如果我有一个名字 Marcus,并且用户在“arc”中键入应该显示所有包含“arc”的名字,而不仅仅是 Marcus。如果我只输入全名并且无论如何只显示一行(注册),我的代码就可以工作。 然后我有选择 3 lagersaldo(代表数量)。如果用户注册了 3 件东西,例如数量为 20,当搜索所有数量为 20 的项目时,应该显示。该代码仅显示其中之一。任何人都可以帮助解决这个问题?

struct varor{
        int varunummer;
        char namn[WORDLENGTH];
        int lagersaldo;
    };
            if(choice=='2'){
                int i, namn;
                printf("Ange namn: ");
                scanf("%d", &namn);
                i = ifNamnExists(namn, reg, nrOfGoods);
                if(i>0){
                    printf("\nVarunummer \t Namn \t\t\t Lagersaldo\n");
                    printf(" %d \t\t %s \t\t\t %d\n",reg[i].varunummer,reg[i].namn,reg[i].lagersaldo);
                }else printf("\nNamn finns inte!\n");
            }
            if(choice=='3'){
                int i, lagersaldo;
                printf("Ange lagersaldo: ");
                scanf("%d", &lagersaldo);
                i = ifLagersaldoExist(lagersaldo, reg, nrOfGoods);
                if(i>0){
                    printf("\nVarunummer \t Namn \t\t\t Lagersaldo\n");
                    printf(" %d \t\t %s \t\t\t %d\n",reg[i].varunummer,reg[i].namn,reg[i].lagersaldo);
                }else printf("\nLagersaldo för det nr. finns inte!\n");
            }
            if(choice=='4') run=0;
}

int ifNamnExists(char namn, const struct varor reg[], int nrOfGoods){
    int i;
    for(i=0; i < nrOfGoods; i++){
        if(strcmp(&namn, reg[i].namn)==0){
            return i;
        }
    }
  return -1;
}
int ifVarunummerExist(int varunummer, const struct varor reg[], int nrOfGoods){
    int i;
    for(i=0; i<nrOfGoods; i++)
        if(reg[i].varunummer == varunummer)
            return i;
        return -1;
}

【问题讨论】:

  • 向我们展示函数:ifNamnExists() 和 ifLagersaldoExist() 并向我们展示结构。如果可能,请向我们展示完整的代码。
  • @MukulKumar 现已更新。整个代码有 300 行,我希望这就够了
  • int i, namn; --> int i; char namn[WORDLENGTH];, scanf("%d", &amp;namn); --> scanf("%s", namn);, if(i&gt;0){ --> if(i&gt;=0){, int ifNamnExists(char namn, --> int ifNamnExists(char namn[],
  • 对于部分名称匹配,使用strstr 而不是strcmp

标签: c arrays search struct


【解决方案1】:

正如@BLUEPIXY 简而言之,您的代码需要进行一些修改。

  • 您将 substring 视为 integer 而不是 string
  • 您正在使用strcmp() 来检查一个字符串是否有一个 substringstrcmp() 不能这样工作,它会检查两个字符串的相等性和返回一个0 值,所以请查看这个函数strstr()
  • 您将在 ifNamnExists() 内的 for 循环中返回值。 return 语句将控件返回到调用它的位置。因此,一旦您的代码找到某些内容,它就会返回而无需进一步迭代,其他函数 ifVarunummerExist() 也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多