實驗目的和要求
1、掌握格式化的輸入輸出方法。
2、熟悉系統提供的輸入操作函數。
3、掌握磁盤文件的輸入輸出方法。
實驗內容
1、程序sy9_1.cpp用以打印表中的數據,但程序中存在邏輯錯誤。上機調試後寫出正確的代碼。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n[3][3]={{1,2,3},{4,5,6},{7,8,9}};
cout<<setw(10)<<n[0][0]<<n[0][1]<<n[0][2]<<endl;
cout<<setw(10)<<n[1][0]<<n[1][1]<<n[1][2]<<endl;
cout<<setw(10)<<n[2][0]<<n[2][1]<<n[2][2]<<endl;
return 0;
}
運行結果如下:
分析:
2、編程實現下面要求:(sy9_2.cpp)
以左對齊方式輸出整數40000,域寬爲15。
打印有符號數和無符號數100。
將十進制整數100以0x開頭的十六進制格式輸出。
用前導 * 格式打印1.234,域寬爲10。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double a=40000;
cout<<setiosflags(ios_base::left)<<setw(15)<<a<<endl;
cout<<showpos<<100<<"\t"<<100u<<endl;
cout.setf(ios::showbase);
cout<<"以0x開頭的十六進制輸出100:";
cout.setf(ios::hex,ios::basefield);
cout<<100<<endl;
cout<<noshowpos<<right<<setfill('*')<<setw(10)<<1.234<<endl;
return 0;
}
運行結果如下:
3、建立某班同學通訊錄二進制文件,文件中的每個記錄包括姓名、電話號碼、QQ號、E-mail和家庭住址。(sy9_3.cpp)
4、從鍵盤上輸入學生的QQ號,在由第4題所建立的通訊錄文件中查找該同學的資料。查找成功時,顯示其所有通訊信息。(sy9_4.cpp)
分析與討論
1、結合實驗中第1題和第2題,說明格式化的輸入輸出方法和應注意的問題。
答:C++的I/O流庫提供了兩種控制格式的輸入輸出的方法:一種是iOS類的成員函數,另一種是使用控制符;在iOS類中有幾個成員函數可用來對輸入輸出的格式控制,這些成員函數通過對格式標誌字、域寬、填充符及輸出精度的設定來控制輸入輸出的格式,使其後的輸入輸出操作按設定的格式進行;C++的I/O流類庫中又提供一種使用控制符進行格式化輸出的方法,這些控制符與成員函數調用的效果一樣,它們可以直接插入到流中,而不必再單獨調用,也可直接被插入符或提取符操作。但控制符中沒有的功能還需使用成員函數的方法來提供。這些控制符是一些特殊的函數,其中所有不帶形式參數的函數是在頭文件iostream.h中定義的,而所有帶形式參數的函數定義則定義在iomanip.h中,如第1題中的set(10)和第2題中的set(10)就是在iomanip.h中定義的。應注意的問題:數據輸出寬度在默認情況下爲表示該數據所需的最少字符數;如果所設置的數據寬度小於數據所需的最少字符數,則數據寬度按默認寬度處理。
2、 結合實驗中第3題和第4題,說明磁盤文件的輸入輸出方法。
答:按數據的存儲形式來分類,文件可分爲文本文件和二進制文件。按數據的存取方式來分類,文件可分爲順序文件和隨機讀取文件。文件的打開和關閉方法:打開文件就是使一個文件流對象與一個指定的文件相關聯。對象名.open(文件名,方式);文件在打開後可進行讀寫操作,在讀寫操作完成後應將其關閉,就是使打開的文件與流對象“脫鉤”;<流對象名>.close()。