如何在结构中搜索多个寄存器?

时间:2017-10-22 05:00:19

标签: c arrays search struct

我有选择2我需要修复。例如,如果我有一个名字Marcus并且用户输入了' arc'应该显示包含' arc'的所有名称。不只是马库斯。如果我只键入整个名称并且只显示一行(寄存器),我的代码就可以工作。 然后我选择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;
}

1 个答案:

答案 0 :(得分:0)

正如@BLUEPIXY简要指出的那样,您的代码需要进行一些修改。

  • 您将子字符串视为整数而不是字符串
  • 您正在使用strcmp()检查字符串是否包含子字符串,而 strcmp()不能正常工作,它会检查两者是否相等字符串并返回0值,请查看此函数strstr()
  • 您将在ifNamnExists()内的for循环中返回值。 return语句将控件返回到调用它的位置。因此,只要您的代码找到某些内容,它就会返回而不进行任何进一步的迭代,与另一个函数ifVarunummerExist()相同。