一 | 假如有一個資料檔案 data.txt 內容如下:
|
---|---|
二 | 這個程式會有兩種結果
|
三 |
會有這樣的表現, 理由如下:
|
四 | 如何解決這個問題呢? (最好是不管 6 之後有沒有空格或是換行都只會 讀入三列資料, 迴圈只能進入三次) 你可以試看看下面的程式 ifs >> x >> y; while (!ifs.eof()) { cout << x << " " << y << endl; ifs >> x >> y; } 請注意:
while (!ifs.eof()) { ifs >> x >> y; if (!ifs.fail()) cout << x << " " << y << endl; }這個程式就可以把各種情況都考慮進來了, 至於為什麼在這裡會使用 ifs.fail() 來測試呢 ? 到底這個函式在做什麼 ? 用 Google 可能不是很容易找到滿意的答案, 建議你自己測試一下, 例如你可以執行下面這段程式 while (!ifs.eof()) { ifs >> x >> y; cout << "good()=" << ifs.good() << ","; cout << "fail()=" << ifs.fail() << ","; cout << "bad()=" << ifs.bad() << ","; cout << "eof()=" << ifs.eof() <<endl; }觀察一下資料檔案內各種資料的可能性, 大概就可以找到可用的方法了!! |
五 | 其實有更簡單的寫法, 先前我們看到開啟檔案串流以後可以用 if (ifs) {...} 來測試串流是否成功開啟, 請再測下面的寫法 while (ifs >> x >> y) { cout << x << " " << y << endl; }在由輸入串流中讀取資料的時候, 我們會在讀取資料之候回傳那個串流物件 (請注意看 return 的描述), 那麼 if (ifs) 或是 while (ifs) 代表什麼意思呢? 你可以參考 operator bool 或是 operator!, 基本上是當串流讀取失敗時 (fail bit 或是 bad bit 為 1) 會回傳 false, 關於 operator 的運作等到 operator overloading 時才會說明 |
回
C++ 物件導向程式設計課程
首頁
製作日期: 03/19/2014 by 丁培毅 (Pei-yih Ting) E-mail: pyting@mail.ntou.edu.tw TEL: 02 24622192x6615 海洋大學 電機資訊學院 資訊工程學系 Lagoon |