實習目標 |
1. 使用 ios, iostream, fstream 類別物件所提供的輸出入功能
2. 使用 C++ 標準輸出入函式庫中所提供物件的界面 3. 熟悉透過物件界面描述物件功能的抽象化描述物件的方法 |
---|---|
步驟一 |
請找出上個星期實習課程所得到的程式,
修改其中的 printf() 敘述, 使用 cout, 以及 I/O manipulator 完成相同的 Console 輸出功能,
修改其中的 scanf() 敘述, 使用 cin 來完成相同的 Console 輸入功能,
請一步一步地編譯, 執行, 並檢查結果
如果你擔心一次通通改好再編譯, 執行會發生很多錯誤的話, (尤其是你現在還不太熟悉 cin 和 cout 的用法,) 你可以一點一點地修改, 修改一個敘述以後就立刻編譯, 執行, 檢查結果 (檢查結果是否正確的工作如果能夠交給 assert 敘述就好了, 想一想這該怎麼做?, 助教會問你喔!!) 請注意 stdio 和 iostream 共用時應該要在 main() 函式一開始的時候呼叫ios::sync_with_stdio(), 以避免 iostream 和 stdio 各用各的緩衝區的問題, 最後的目標是完全用 iostream 函式庫來達成原來程式的功能 另外, 你也許會有一個疑問, 就是為什麼不把 cin 和 cout 所有的用法都完整交代清楚以後再叫你練習, 這樣子不是有點浪費時間?? )*(&(*^%...
|
步驟二 |
繼續步驟一的修改, 程式中 ReadFile() 函式使用 stdio 中的檔案輸出入函式,
請將其改為使用 ifstream 來完成相同的檔案輸入功能
C++ 標準函式庫中基本的檔案存取功能範例如下: #include <fstream> #include <string> using namespace std; ifstream in("Scopy.cpp"); // 開啟輸入檔案 if (!in) { cerr << "fail in opening scopy.cpp for reading"; exit(1); } ofstream out("Scopy2.cpp"); // 開啟輸出檔案 if (!out) { cerr << "fail in opening scopy2.cpp for writing"; exit(1); } string s; while (getline(in, s)) // delimiter '\n' deleted automatically out << s << "\n";請注意上面這段程式是運用 getline() 函式由檔案串流 in 中依序讀取字串 到 s 這個 string 型態的變數中, 由於檔案和鍵盤在 iostream / fstream 函式庫中都看成是資料串流, 所以由檔案中讀取數字的方法和由鍵盤讀取數字的方法是一樣的, 例如: int x; double y; in >> x >> y; |
步驟三 |
如果我現在有一個新的資料檔案 raw4.dat,
檔案內容的格式稍微修改如下:
99 number of data item 6 first item 7 second item 8 the score 9 ... 8每一筆資料都在一列上, 但是後面有一些文字的註解, 在資料後會有至少一格的空白字元來區隔, 請修改 ReadFile() 函式來讀取新的資料檔案格式 提示: 試看看 infile >> data; infile.getline(buf, sizeof(buf)); 不要照抄, 瞭解為什麼要這樣做以後再試看看, 這段程式的變數的資料型態要自己定義喔?!?! |
步驟四 | 請再製作一個 WriteFile() 函式將剛才由 raw4.dat 檔案內讀到的 資料依照舊的資料格式 (raw1.dat, raw2.dat, raw3.dat 的格式) 寫到 raw4a.dat 中 |
步驟五 | 請助教檢查後, 將所完成的 project (去掉 debug/ 資料匣下的所有內容) 壓縮起來, 選擇 Lab2-1 上傳, 後面的實習課程可能需要使用這裡所完成的程式 |
回
C++ 物件導向程式設計課程
首頁
製作日期: 02/16/2004
by 丁培毅 (Pei-yih Ting)
E-mail: pyting@mail.ntou.edu.tw
TEL: 02 24622192x6615
海洋大學
電機資訊學院
資訊工程系
Lagoon