本單元重點回顧
讀寫檔案的三大用途:本機測大測資(不再複製貼上)、輸出存檔慢慢比對、應付要求檔案讀寫的比賽。但 AACPOJ 與 APCS 都是標準輸入輸出——上傳的程式不要包含讀檔。
ifstream fin("input.txt");:開檔之後,cin 會的 fin 都會——>>、getline、跳過空白換行的規則全部相同。開檔失敗安靜無聲:沒有錯誤訊息,讀什麼都失敗、變數維持原值。開檔後先
if (!fin)檢查。ofstream fout("output.txt");:寫檔用法同 cout;開檔即清空既有內容;要續寫用ios::app附加模式。freopen 換線路:
freopen("input.txt", "r", stdin)讓 cin 改讀檔案、freopen("output.txt", "w", stdout)讓 cout 改寫檔案——程式其他部分一行不改。上傳前要拿掉。#ifdef LOCAL模板:freopen 包進#ifdef LOCAL,本機編譯加-DLOCAL才生效——OJ 不會定義它,交上去自動是乾淨版,「忘記拿掉」從此絕種。相對路徑相對於工作目錄:工作目錄是「執行時的位置」,不一定是原始碼的位置。找不到檔案照三步查:
if (!fin)確認、換絕對路徑試、檢查input.txt.txt副檔名事故。Windows 路徑的\要寫\\或改用/。讀到檔案結尾:
while (fin >> x)、while (getline(fin, line))——上冊 4.8 的 EOF 模式原班人馬,EOF「檔案結尾」這名字如今名符其實。(延伸)重導向:
./sum < in.txt > out.txt,作業系統代勞換線路,程式零修改——「程式外的 freopen」。