每個位元組存放一個 ASCII 碼,對應一個可見字元。優點:人類可直接閱讀(記事本開啟)、支援格式化輸出入;缺點:數值轉換耗時、佔空間大(整數 100000 需 6 位元組 vs 二進位 4 位元組)。
<< / >>:繼承自 iostream,用法與 cout/cin 幾乎相同,自動處理型別轉換put/get/getline:單字元/整行操作,控制力更細緻int a[10];
ofstream outfile("f1.dat"); // 預設 ios::out
for (int i=0; i<10; ++i) {
cin >> a[i];
outfile << a[i] << ' '; // 必須加空格分隔!
}
outfile.close();
關鍵:輸出數值後必須加分隔符(空格/換行),否則讀回時無法區分「123」是 1、2、3 還是 123。
ifstream infile("f1.dat", ios::in | ios::nocreate); // nocreate 舊標準,新編譯器可省略
for (int i=0; i<10; ++i) infile >> a[i]; // 自動跳過空白字元
// 尋找最大值邏輯...
infile.close();
// 階段 1:從鍵盤讀一行,仅保留字母存入 f2.dat
void save_to_file() {
ofstream outfile("f2.dat");
char line[80];
cin.getline(line, 80);
for (int i=0; line[i]; ++i)
if (isalpha(line[i])) { outfile.put(line[i]); cout.put(line[i]); }
outfile.close();
}
// 階段 2:從 f2.dat 讀取,小寫轉大寫存入 f3.dat
void get_from_file() {
ifstream infile("f2.dat");
ofstream outfile("f3.dat");
char ch;
while (infile.get(ch)) {
if (islower(ch)) ch = toupper(ch);
outfile.put(ch); cout.put(ch);
}
infile.close(); outfile.close();
}
TYPE f3.dat、Linux cat f3.datvoid display_file(const char* filename) {
ifstream infile(filename);
char ch;
while (infile.get(ch)) cout.put(ch);
cout << endl;
infile.close();
}
cin、infile 同屬 istream 體系,cout、outfile 同屬 ostream 體系。同樣的 get/put/getline 既可用於標準裝置,也可用於檔案流,體現 C++ I/O 庫的可擴展性與一致性。
ASCII 檔案適合需人工閱讀、跨平台交換、格式化報表的場景。善用 <</>> 處理結構化數值,用 put/get/getline 處理字元級邏輯,並記住分隔符原則,即可靈活駕馭文字資料流。