日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++之文件与文件流】f1.dat 和 f2.dat 文件的读写

發布時間:2023/12/31 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++之文件与文件流】f1.dat 和 f2.dat 文件的读写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目要求

建立兩個磁盤文件 f1.dat 和 f2.dat ,編程序實現以下工作:
(1)從鍵盤輸入20個整數,分別存放在兩個磁盤文件中(每個文件存放10個);
(2)從 f1.dat 中讀入10個數,然后存放到 f2.dat 文件原有數據的后面;
(3)從 f2.dat 中讀入20個整數,對它們按從小到大的順序存放到 f2.dat (不保留原來的數據)。

——譚浩強的《C++面向對象程序設計》第7章習題第4小題

文件

文件是指存儲在磁盤類介質上的相關數據的集合, 也稱磁盤文件。

程序設計中涉及到的文件主要由兩類,一類是程序文件,包括源程序文件、目標文件和可執行文件;另一類是數據文件,即程序輸入輸出的存儲對象,涉及輸入輸出數據和中間結果。

根據文件中數據的表示形式,文件又分為ASCII文件和二進制文件。ASCII文件就是文本文件,每個字節表示一個字符。二進制文件是把內存中的數據、指令按其在內存中的原始格式存放在磁盤上。

文件流

在C++的I/O類庫里定義了幾種文件流類,專門用于文件的輸入和輸出操作:

  • ifstream類,支持從磁盤文件輸入
  • ofstream類,支持向磁盤文件輸出
  • fstream類,支持對磁盤文件輸出和輸出

要實現對文件進行輸入輸出,必須定義一個文件流類對象,用對象調用類的成員函數對文件操作,完成程序與磁盤文件之間的數據傳輸和交換。

對文件的操作

1.文件的打開與關閉

打開文件有兩種實現方法:
(1)建立文件流對象,用對象調用類成員函數open。
格式:

文件流對象.open(文件名,輸入輸出方式);
  • 文件名可以包括路徑,如省略路徑,默認文件在當前目錄(工程文件目錄)。
  • 輸入輸出方式是在ios類中定義的枚舉常量,有多種選擇。

(2)在定義文件流對象時指定參數(在構建流對象的同時打開對應文件)
格式:

文件流類 對象(文件名,輸入輸出方式);
  • 打開文件操作可能成功也可能失敗,可以測試文件流對象判定。文件流對象是真,表示成功;否則表示失敗。

例如:
以寫的方式打開文件 f1.dat

fstream outfile; outfile.open("f1.dat", ios::out);

或者:

fstream outfile("f1.dat", ios::out);

關閉磁盤文件

  • 文件使用完畢,必須關閉文件,用文件流對象調用關閉文件成員函數實現。
  • 格式: 文件流對象.close();
  • 功能:解除文件流對象與磁盤文件的關聯,防止文件數據被意外修改。

2.讀寫ASCII碼文件

可以通過提取、插入運算符(>>、<<)和調用類的成員函數 (put、 get、getline等) 兩種方法。

例如:

for (int i = 0; i < 10; i++) {cin >> a[i]; // 輸入10個數存放到outfile1文件中outfile1 << a[i] << " "; }

程序1

/* ************************************************************************* @file: main.cpp @date: 2020.12.26 @author: Xiaoxiao @brief: 從鍵盤輸入20個整數,分別存放在兩個磁盤文件中 @blog: https://blog.csdn.net/weixin_43470383/article/details/111665194 ************************************************************************* */ #include<iostream> #include<fstream> using namespace std;int main() {int a[10];fstream outfile1, outfile2; // 定義兩個文件流對象outfile1.open("f1.dat", ios::out); // f1.dat 和 f2.dat 均為輸出文件outfile2.open("f2.dat", ios::out);if (!outfile1){cerr << "f1.dat open error!" << endl; // 檢查打開 f1.dat 是否成功exit(1);}if (!outfile2){cerr << "f2.dat open error!" << endl; // 檢查打開 f2.dat 是否成功exit(1);}for (int i = 0; i < 10; i++){cin >> a[i]; // 輸入10個數存放到 f1.dat 文件中outfile1 << a[i] << " ";}for (int i = 0; i < 10; i++){cin >> a[i]; // 輸入10個數存放到 f2.dat 文件中outfile2 << a[i] << " ";}outfile1.close(); // 關閉 f1.dat 文件outfile2.close(); // 關閉 f2.dat 文件system("pause");return 0; }

運行結果1

輸入:
1 3 5 7 9 2 4 6 8 10 11 13 15 17 19 12 14 16 18 20

文件 f1.dat 內容:
1 3 5 7 9 2 4 6 8 10

文件 f2.dat 內容:
11 13 15 17 19 12 14 16 18 20

程序2

/* ************************************************************************* @file: main.cpp @date: 2020.12.26 @author: Xiaoxiao @brief: 從 f1.dat 中讀入10個數,然后存放到 f2.dat 文件原有數據的后面 @blog: https://blog.csdn.net/weixin_43470383/article/details/111665194 ************************************************************************* */ #include<iostream> #include<fstream> using namespace std;int main() {int a[10];fstream infile1, outfile2; // 定義兩個文件流對象infile1.open("f1.dat", ios::in); // f1.dat 作為輸入文件outfile2.open("f2.dat", ios::app); // f2.dat 作為輸出文件,寫入數據添加在文件末尾if (!infile1){cerr << "f1.dat open error!" << endl; // 檢查打開 f1.dat 是否成功exit(1);}if (!outfile2){cerr << "f2.dat open error!" << endl; // 檢查打開 f2.dat 是否成功exit(1);}for (int i = 0; i < 10; i++){infile1 >> a[i]; // 從 f1.dat 中讀入10個數outfile2 << a[i] << " "; // 存放到 f2.dat 文件原有數據的后面}infile1.close(); // 關閉 f1.dat 文件outfile2.close(); // 關閉 f2.dat 文件system("pause");return 0; }

運行結果2


文件 f1.dat 內容:
1 3 5 7 9 2 4 6 8 10

文件 f2.dat 內容:
11 13 15 17 19 12 14 16 18 20 1 3 5 7 9 2 4 6 8 10

程序3

/* ************************************************************************* @file: main.cpp @date: 2020.12.26 @author: Xiaoxiao @brief: 從 f2.dat 中讀入20個整數并從小到大的順序(不保留原來的數據) @blog: https://blog.csdn.net/weixin_43470383/article/details/111665194 ************************************************************************* */ #include<iostream> #include<fstream> using namespace std;// 選擇法排序,不懂的可以看我的博客 // https://editor.csdn.net/md/?articleId=109249369 int sort(int a[]) {int i, j, k, min;for (i = 0; i < 19; i++){k = i;for (j = i + 1; j < 20; j++){if (a[j] < a[k])k = j;}if (k != i){min = a[k];a[k] = a[i];a[i] = min;}}return a[10]; }int main() {int i, j, k, min;int a[20];fstream infile2, outfile2; // 定義文件流對象infile2.open("f2.dat", ios::in); // f2.dat 作為輸入文件if (!infile2){cerr << "f2.dat open error!" << endl; // 檢查打開 f1.dat 是否成功exit(1);}for (int i = 0; i < 20; i++){infile2 >> a[i]; // 從 f2.dat 中讀入20個數}sort(a);infile2.close(); // 關閉f2.dat文件outfile2.open("f2.dat", ios::out); // f2.dat 作為輸出文件,文件中原有內容刪除if (!outfile2){cerr << "f2.dat open error!" << endl; // 檢查打開 f1.dat 是否成功exit(1);}for (i = 0; i<20; i++){outfile2 << a[i] << " "; // 向 f2.dat 輸出已排序的20個數cout << a[i] << " "; // 同時輸出到屏幕} infile2.close(); // 關閉f2.dat文件system("pause");return 0; }

運行結果3



文件 f2.dat 內容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

程序整合(函數封裝)

/* ************************************************************************* @file: main.cpp @date: 2020.12.26 @author: Xiaoxiao @brief: 從 f2.dat 中讀入20個整數并從小到大的順序(不保留原來的數據) @blog: https://blog.csdn.net/weixin_43470383/article/details/111665194 ************************************************************************* */ #include<iostream> #include<fstream> using namespace std;// 選擇法排序,不懂的可以看我的博客 // https://editor.csdn.net/md/?articleId=109249369 int sort(int a[]) {int i, j, k, min;for (i = 0; i < 19; i++){k = i;for (j = i + 1; j < 20; j++){if (a[j] < a[k])k = j;}if (k != i){min = a[k];a[k] = a[i];a[i] = min;}}return a[10]; }void fun1() {int a[10];fstream outfile1, outfile2; // 定義兩個文件流對象outfile1.open("f1.dat", ios::out); // f1.dat 和 f2.dat 均為輸出文件outfile2.open("f2.dat", ios::out);if (!outfile1){cerr << "f1.dat open error!" << endl; // 檢查打開 f1.dat 是否成功exit(1);}if (!outfile2){cerr << "f2.dat open error!" << endl; // 檢查打開 f2.dat 是否成功exit(1);}for (int i = 0; i < 10; i++){cin >> a[i]; // 輸入10個數存放到 f1.dat 文件中outfile1 << a[i] << " ";}for (int i = 0; i < 10; i++){cin >> a[i]; // 輸入10個數存放到 f2.dat 文件中outfile2 << a[i] << " ";}outfile1.close(); // 關閉 f1.dat 文件outfile2.close(); // 關閉 f2.dat 文件 }void fun2() {int a[10];fstream infile1, outfile2; // 定義兩個文件流對象infile1.open("f1.dat", ios::in); // f1.dat 作為輸入文件outfile2.open("f2.dat", ios::app); // f2.dat 作為輸出文件,寫入數據添加在文件末尾if (!infile1){cerr << "f1.dat open error!" << endl; // 檢查打開 f1.dat 是否成功exit(1);}if (!outfile2){cerr << "f2.dat open error!" << endl; // 檢查打開 f2.dat 是否成功exit(1);}for (int i = 0; i < 10; i++){infile1 >> a[i]; // 從 f1.dat 中讀入10個數outfile2 << a[i] << " "; // 存放到 f2.dat 文件原有數據的后面}infile1.close(); // 關閉 f1.dat 文件outfile2.close(); // 關閉 f2.dat 文件 }void fun3() {int i, j, k, min;int a[20];fstream infile2, outfile2; // 定義文件流對象infile2.open("f2.dat", ios::in); // f2.dat 作為輸入文件if (!infile2){cerr << "f2.dat open error!" << endl; // 檢查打開 f1.dat 是否成功exit(1);}for (int i = 0; i < 20; i++){infile2 >> a[i]; // 從 f2.dat 中讀入20個數}sort(a);infile2.close(); // 關閉f2.dat文件outfile2.open("f2.dat", ios::out); // f2.dat 作為輸出文件,文件中原有內容刪除if (!outfile2){cerr << "f2.dat open error!" << endl; // 檢查打開 f1.dat 是否成功exit(1);}for (i = 0; i < 20; i++){outfile2 << a[i] << " "; // 向 f2.dat 輸出已排序的20個數cout << a[i] << " "; // 同時輸出到屏幕}infile2.close(); // 關閉f2.dat文件 }int main() {fun1();fun2();fun3();system("pause");return 0; }

結果和運行結果3的是一樣的。

總結

以上是生活随笔為你收集整理的【C++之文件与文件流】f1.dat 和 f2.dat 文件的读写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。