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

问题描述:

我有我需要修复的选择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; 
} 
+2

向我们展示函数:ifNamnExists()和ifLagersaldoExist()并向我们显示结构。如果可能,向我们展示完整的代码。 –

+1

@MukulKumar现在更新。整个代码是300行,我希望这是足够的 –

+1

'int i,namn;' - >'int i; char namn [WORDLENGTH];','scanf(“%d”,&namn);' - >'scanf(“%s”,namn);','if(i> 0){' - >'if > = 0){','int ifNamnExists(char namn,' - >'int ifNamnExists(char namn [],' – BLUEPIXY

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

  • 您治疗整数而不是
  • 您正在使用strcmp()检查,如果字符串有的strcmp()不起作用这样,它检查两个字符串的平等,并返回一个0值,因此,看看这个功能strstr()
  • 您正在返回ifNamnExists()内的for循环中的值。 return语句将控件返回到调用它的地方。所以,只要你的代码发现了一些东西,它就会返回而不会迭代,与其他函数ifVarunummerExist()一样。