2017-10-22 93 views
0

我有我需要修復的選擇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

回答

0

正如@BLUEPIXY指出的那樣,簡而言之,您的代碼需要一些修改。

  • 您治療整數而不是
  • 您正在使用strcmp()檢查,如果字符串有的strcmp()不起作用這樣,它檢查兩個字符串的平等,並返回一個0值,因此,看看這個功能strstr()
  • 您正在返回ifNamnExists()內的for循環中的值。 return語句將控件返回到調用它的地方。所以,只要你的代碼發現了一些東西,它就會返回而不會迭代,與其他函數ifVarunummerExist()一樣。