如何在结构中搜索多个寄存器?
问题描述:
我有我需要修复的选择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;
}
答
正如@BLUEPIXY指出的那样,简而言之,您的代码需要一些修改。
- 您治疗子为整数而不是串。
- 您正在使用
strcmp()
检查,如果字符串有子而的strcmp()不起作用这样,它检查两个字符串的平等,并返回一个0
值,因此,看看这个功能strstr()
。 - 您正在返回
ifNamnExists()
内的for循环中的值。 return语句将控件返回到调用它的地方。所以,只要你的代码发现了一些东西,它就会返回而不会迭代,与其他函数ifVarunummerExist()
一样。
向我们展示函数:ifNamnExists()和ifLagersaldoExist()并向我们显示结构。如果可能,向我们展示完整的代码。 –
@MukulKumar现在更新。整个代码是300行,我希望这是足够的 –
'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