我有选择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;
}
答案 0 :(得分:0)
正如@BLUEPIXY简要指出的那样,您的代码需要进行一些修改。
strcmp()
检查字符串是否包含子字符串,而 strcmp()不能正常工作,它会检查两者是否相等字符串并返回0
值,请查看此函数strstr()
。 ifNamnExists()
内的for循环中返回值。 return语句将控件返回到调用它的位置。因此,只要您的代码找到某些内容,它就会返回而不进行任何进一步的迭代,与另一个函数ifVarunummerExist()
相同。