

じゃんけんの対戦回数と勝敗の戦績を.txtファイルに記録して表示したいのですが、私が作成した下記のソースコードのままだと戦績がファイルに蓄積されません。どのように変更を加えれば戦績を蓄積させられるようになりますか？  
ここでしばらく行き詰まっているので、わかる方がいらっしゃればご教示いただけると幸いです。よろしくお願いいたします。

補足：読み込みは関数を定義していますが、書き込みはint main()内に入れてあります。分かりにくかったら申し訳ないです。

[code]

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    #include "jankendata.txt"
    
    void Read(const char *file) {
       FILE *fp;
       if ((fp = fopen("jankendata.txt", "r"))==NULL){
          printf("初めての本プログラムの実行\n");
       }else {
       int battle=0, win=0, lose=0, draw=0;
       fscanf(fp, "%d%d%d%d", &battle, &win, &lose, &draw);
       printf("%d戦 %d勝 %d敗 %d引き分け\n", battle, win, lose, draw);
       fclose(fp);
       }
    }
    
    int main(void)
    {   
       const char *file = "jankendata.txt";
       int battle=0, win=0, lose=0, draw=0;
       int me, npc, result;
       FILE *fp;
       Read(file);
           //自分が出す手の選択
           printf("あなたが出す手を選択-＞\n【グー】：０【チョキ】：１【パー】：２終了する：３ 
      \n");
        scanf("%d", &me);
    
        if (me == 0 || me == 1 || me == 2 || me == 3){
        } else {
            printf("０〜３の数字を選択してください。\n");
            scanf("%d", &me);
        }
    
        //npcが出す手の選択
        srand(time(NULL));
        npc = rand() % 3;
        printf("相手は%dを出した！\n", npc);
    
        //自分と相手との比較・結果表示
        result = (me - npc + 3) % 3;
        if (result == 2){
            printf("あなたの勝利\n");
            win ++;
        } else if (result == 1){
            printf("あなたの負け\n");
            lose ++;
        } else if (result == 0){
            printf("引き分け\n");  
            draw ++;
        }
    
        if ((fp = fopen("jankendata.txt", "w"))==NULL){
            printf("\aファイルを展開できません。\n");
        } else {
        battle = win + lose + draw;
        fprintf(fp, "%d %d %d %d\n",battle, win, lose, draw);
        fclose(fp);
        }
    
    return EXIT_SUCCESS;
    }
    
[/code]


CC BY-SA 4.0
2021-11-12T16:40:36.890
83590
2021-11-12T16:55:35.773
2021-11-12T16:55:35.773
49063
49063
question
c
ファイルの読み込み／書き出し方法について教えてください


結果を記録するためにファイルを `fopen` で開いている部分で、モードに `w` を指定していますが  
これだと **ファイルを開くたびに元の内容を破棄** してしまいます。

**元のコード:**

[code]

    if ((fp = fopen("jankendata.txt", "w"))==NULL){
    
[/code]

元の内容を維持したまま追記したい場合には、代わりに `a` などを指定してみてください。

**変更例:**

[code]

    if ((fp = fopen("jankendata.txt", "a"))==NULL){
    
[/code]

参考:  
[C言語 ファイルの開き方・閉じ方【fopenとfcloseの使い方】](https://monozukuri-c.com/langc-file-open-
close/)


CC BY-SA 4.0
2021-11-12T16:54:04.087
83591
2021-11-12T16:54:04.087
3060
83590
answer