本單元重點回顧

  1. 讀寫檔案的三大用途:本機測大測資(不再複製貼上)、輸出存檔慢慢比對、應付要求檔案讀寫的比賽。但 AACPOJ 與 APCS 都是標準輸入輸出——上傳的程式不要包含讀檔

  2. ifstream fin("input.txt");:開檔之後,cin 會的 fin 都會——>>getline、跳過空白換行的規則全部相同。

  3. 開檔失敗安靜無聲:沒有錯誤訊息,讀什麼都失敗、變數維持原值。開檔後先 if (!fin) 檢查。

  4. ofstream fout("output.txt");:寫檔用法同 cout;開檔即清空既有內容;要續寫用 ios::app 附加模式。

  5. freopen 換線路freopen("input.txt", "r", stdin) 讓 cin 改讀檔案、freopen("output.txt", "w", stdout) 讓 cout 改寫檔案——程式其他部分一行不改。上傳前要拿掉。

  6. #ifdef LOCAL 模板:freopen 包進 #ifdef LOCAL,本機編譯加 -DLOCAL 才生效——OJ 不會定義它,交上去自動是乾淨版,「忘記拿掉」從此絕種。

  7. 相對路徑相對於工作目錄:工作目錄是「執行時的位置」,不一定是原始碼的位置。找不到檔案照三步查:if (!fin) 確認、換絕對路徑試、檢查 input.txt.txt 副檔名事故。Windows 路徑的 \ 要寫 \\ 或改用 /

  8. 讀到檔案結尾while (fin >> x)while (getline(fin, line))——上冊 4.8 的 EOF 模式原班人馬,EOF「檔案結尾」這名字如今名符其實。

  9. (延伸)重導向./sum < in.txt > out.txt,作業系統代勞換線路,程式零修改——「程式外的 freopen」。