2017-10-24 9 views
-1

varunummerの検索結果と一致する1つ以上の項目のみを保存するにはどうすればよいですか?この関数は機能しますが、配列が制限されていてファイルを保存すると消えてしまう項目が保存され、検索された項目のみが保存されます。また、一致した項目の数だけでnrOfGoodsを増やすにはどうすればよいですか? PS:nrOfGoodsは、配列内の項目数を追跡します。これは私が今までに得たものです:1つのアイテムのみを.txtファイルに保存する方法は?機能

struct varor{ 
    int varunummer; 
    char namn[WORDLENGTH]; 
    int lagersaldo; 
}; 

void saveProduct(struct varor reg[], int nrOfGoods){ 
    FILE * fp; 
    char nameFile[WORDLENGTH]; 
    int i, j, varunummer; 

    printf("Enter varunummer: "); 
    scanf("%d", &varunummer); 
    for(i=0; i<nrOfGoods; i++){ 
     if (reg[i].varunummer == varunummer){  
      printf("Enter file name to save (end with .txt): "); 
      scanf("%s", nameFile); 
      fp = fopen (nameFile, "w"); 

      //fprintf(fp,"%d\n", nrOfGoods);// this delete all my other saved items 

      for(i=0;i<(nrOfGoods);i++){ 
       fprintf(fp,"%d\n", reg[i].varunummer); 
       fprintf(fp,"%s\n", reg[i].namn); 
       fprintf(fp,"%d\n", reg[i].lagersaldo); 
      } 
     } else printf("\nVarunummer not found!\n"); 
    } 
    fclose(fp); 

} 
+1

両方のループで同じ変数 'i'を使用しています。また、「Varrunummer not found」メッセージは、番号が見つかっても印刷されます。これは、別の項目があっても一致しない項目ごとに印刷されるためです。 – Barmar

+0

@Barmarはい私はそれをしましたが、前に保存されたすべての私のコンテンツを消去します。私はそれがfprintf(fp、 "%d \ n"、nrOfGoods)のためだと思います。代わりにそれをどのように書くべきですか? – Zuzu

+0

@xingファイルを追加しない項目を追加する必要があります – Zuzu

答えて

0

2番目のループに項目を書き込むべきではありません。一致する項目を書き留めてください。

また、ループの前にファイルを開く必要があります。 wモードでファイルを開くと、最初にファイルが空になります。したがって、ループを通過するたびに前回の反復が削除されます。

ループ内にVarunnummer not foundを印刷しないでください。配列全体を見るまで項目が見つからないかどうかはわかりません。一致する項目を見つけたときに設定した変数を使用します。見つけられない場合は更新されず、最後にメッセージを印刷することができます。 Searching array reports "not found" even though it's found

struct varor{ 
    int varunummer; 
    char namn[WORDLENGTH]; 
    int lagersaldo; 
}; 

void saveProduct(struct varor reg[], int nrOfGoods){ 
    FILE * fp; 
    char nameFile[WORDLENGTH]; 
    int i, j, varunummer; 
    int found = 0; 

    printf("Enter varunummer: "); 
    scanf("%d", &varunummer); 
    printf("Enter file name to save (end with .txt): "); 
    scanf("%s", nameFile); 
    fp = fopen (nameFile, "w"); 
    for(i=0; i<nrOfGoods; i++){ 
     if (reg[i].varunummer == varunummer){  
      fprintf(fp,"%d\n", reg[i].varunummer); 
      fprintf(fp,"%s\n", reg[i].namn); 
      fprintf(fp,"%d\n", reg[i].lagersaldo); 
      found = 1; 
     } 
    } 
    fclose(fp); 
    if (!found) { 
     printf("\nVarunummer not found!\n"); 
    } 
} 
関連する問題