首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言文件讀寫成績系統:fread/fwrite 結構體數組,循環讀寫次數與數組長度一致,避免只寫第一個

     編輯:程式設計綜合問答

原代碼 `fwrite(&studenta, sizeof(struct stu), 1, fp)` 只寫 1 個元素,導致後續讀取只有第一條。

修正版主流程

int main() {
    struct Stu { int numb; char name[10]; int score; } a[3], b[3];
    FILE* fp = fopen("score.dat", "wb+");
    
    // 輸入
    for (int i = 0; i < 3; ++i) {
        printf("編號 姓名 成績: ");
        scanf("%d %9s %d", &a[i].numb, a[i].name, &a[i].score);
    }
    // 寫入全部 3 個
    fwrite(a, sizeof(struct Stu), 3, fp);
    
    // 讀取全部
    rewind(fp);
    fread(b, sizeof(struct Stu), 3, fp);
    
    for (int i = 0; i < 3; ++i)
        printf("%d %s %d\n", b[i].numb, b[i].name, b[i].score);
    
    fclose(fp);
    return 0;
}

關鍵修正

  • `fwrite/fread` 第三參數改為 `3`(數組長度)。
  • `scanf("%9s")` 防止姓名溢出。
  • 二進制模式 `"wb+"`/`"rb+"` 避免換行符轉換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved