C++中簡單的文本文件輸入/輸出示例詳解
為了便于理解,我們把cout 用于控制臺(tái)輸出時(shí)的一些情況和寫入到文本文件的情況進(jìn)行類比:
cout 控制臺(tái)輸出
包含頭文件 iostream
頭文件 iostream 定義了一個(gè) ostream 類用于處理輸出
頭文件 iostream 聲明了一個(gè)名為 cout 的 ostream 對(duì)象
指明名稱空間 std
可以結(jié)合使用cout和運(yùn)算符<<來顯示各種類型的數(shù)據(jù)
文本文件輸出(寫入到文本文件)
包含文件頭 fstream
頭文件 fstream 定義了一個(gè)ofstream 類用于處理輸出
聲明一個(gè)或多個(gè) ofstream 對(duì)象,可以自由命名
指明名稱空間 std
把 3 中聲明的 ofstream 對(duì)象與文件關(guān)聯(lián)起來,比如使用 open()方法
使用完文件后,需要使用 close()方法將其關(guān)閉
還可以結(jié)合 ofstream 對(duì)象和運(yùn)算符<<來輸出各種類型的數(shù)據(jù)
注意:cout 控制臺(tái)輸入輸出中,頭文件 iostream 聲明了一個(gè)名為 cout 的 ostream 對(duì)象,無需自己手動(dòng)聲明;文件輸出中,我們必須自己動(dòng)手聲明一個(gè) ofstream 對(duì)象,為其命名,將其同文件關(guān)聯(lián)起來。請(qǐng)看下面的例子:
#include<fstream> ofstream OutFile; //聲明一個(gè) ofstream 對(duì)象 OutFile.open("study.txt"); //將OF與“study.txt”文件關(guān)聯(lián)起來
下面請(qǐng)看一個(gè)完整的程序,用戶輸入信息,將信息顯示到屏幕上,再將這些信息寫入到文本文件中:
#include <iostream> #include <fstream> using namespace std; int main() { char name[20]; double height; double weight; ofstream outFile;//創(chuàng)建了一個(gè)ofstream 對(duì)象 outFile.open("information.txt");//outFile 與一個(gè)文本文件關(guān)聯(lián) cout<<"Enter name: "; cin.getline(automobile, 20); cout<<"Enter height: "; cin>>year; cout<<"Enter weight: "; cin>>weight; // cout 控制臺(tái)輸出前面輸入的信息 cout<<fixed; cout.precision(2); cout.setf(ios_base::showpoint); cout<<"Make and Model: "<<automobile<<endl; cout<<"Year: "<<year<<endl; cout<<"Was asking $"<<a_price<<endl; cout<<"Now asking $"<<d_price<<endl; // outFile 把信息寫入到文本文件 outFile<<fixed; //小數(shù)點(diǎn)格式顯示double outFile.precision(2); //設(shè)置精度 outFile.setf(ios_base::showpoint); //強(qiáng)制顯示小數(shù)點(diǎn)后的零 outFile<<"Name: "<<name<<endl; outFile<<"Height: "<<height<<endl; outFile<<"Weight: "<<weight<<endl; outFile.close(); //使用完文本文件后要用close()方法將其關(guān)閉 return 0; }
接下來,我們?cè)侔裞in 用于控制臺(tái)輸入時(shí)的一些情況和讀取文本文件的情況進(jìn)行類比:
cin 控制臺(tái)輸出
包含頭文件 iostream
頭文件 iostream 定義了一個(gè) istream 類用于處理輸出
頭文件 iostream 聲明了一個(gè)名為 cin 的 istream 對(duì)象
指明名稱空間 std
可以結(jié)合使用cin和運(yùn)算符>>來輸入各種類型的數(shù)據(jù)
文本文件輸入(讀取文本文件)
包含文件頭 fstream
頭文件 fstream 定義了一個(gè)ifstream 類用于處理輸出
聲明一個(gè)或多個(gè) ifstream 對(duì)象,可以自由命名
指明名稱空間 std
把 3 中聲明的 ifstream 對(duì)象與文件關(guān)聯(lián)起來,比如使用 open()方法
使用完文件后,需要使用 close()方法將其關(guān)閉
還可以結(jié)合 ifstream 對(duì)象和運(yùn)算符>>來讀取各種類型的數(shù)據(jù)
可以用 cin 和 get() 方法來讀取一個(gè)字符,或用 cin 和 getline() 方法來讀取一行字符
可以結(jié)合使用 ifstream 和 eof()、fail()方法來判斷輸入是否成功
如果試圖打開一個(gè)不存在的文件用于輸入將會(huì)導(dǎo)致后面使用 ifstream 對(duì)象讀取數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤,因此用戶需要使用 is_open() 方法檢查文件是否被成功打開,如下:
#include <fstream> #include <cstdlib> ifstream InFile; InFile.open("information.txt"); if(!Infile.is_open()){ exit(EXIT_FAILURE); }
如果文件被成功打開, is_open() 方法將返回 true , exit()的原型在頭文件 cstdlib 中被定義,exit(EXIT_FAILURE) 用于終止程序。
下面請(qǐng)看一個(gè)完整的程序,用戶打開指定的文本文件,讀取文件中的 double 類型數(shù)據(jù),并在控制臺(tái)輸出所讀取數(shù)據(jù)的數(shù)目、總和以及平均數(shù):
#include <iostream> #include <fstream> #include <cstdlib> using namespace std; const int SIZE = 60; int main() { char fileName[SIZE]; ifstream InFile; cout<<"Enter the name of data file: "; cin.getline(fileName, SIZE); cout<<fileName<<endl; InFile.open(fileName); if(!InFile.is_open()){ cout<<"Could not open the file "<< fileName <<endl; cout<<"Program terminating.\n"; exit(EXIT_FAILURE); } double value; double sum = 0.0; int count = 0; InFile >> value; while(InFile.good()){ ++count; sum += value; InFile >> value; } if (InFile.eof()) cout<<"End of file reached:\n"; else if (InFile.fail()) cout<<"Input terminated by data mismatch.\n"; else cout<<"Input terminated for unknown reason.\n"; if(count == 0) cout<<"No data processed.\n"; else{ cout<<"Items read: "<<count<<endl; cout<<"Sum: "<<sum<<endl; cout<<"Average: "<<sum/count<<endl; } InFile.close(); return 0; }
總結(jié)
到此這篇關(guān)于C++中簡單的文本文件輸入/輸出的文章就介紹到這了,更多相關(guān)C++文本文件輸入/輸出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Cocos2d-x學(xué)習(xí)筆記之CCLayerColor層的使用實(shí)例
這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之CCLayerColor層的使用實(shí)例,CCLayerColor是一個(gè)顏色布景層類,本文依然使用Hello World作為例子講解,需要的朋友可以參考下2014-09-09詳解C++中StringBuilder類的實(shí)現(xiàn)及其性能優(yōu)化
在Java和C#中,StringBuilder可以創(chuàng)造可變字符序列來動(dòng)態(tài)地?cái)U(kuò)充字符串,那么在C++中我們同樣也可以實(shí)現(xiàn)一個(gè)StringBuilder并且用來提升性能,下面就來詳解C++中StringBuilder類的實(shí)現(xiàn)及其性能優(yōu)化2016-05-05C語言中不定參數(shù)?...?的語法以及函數(shù)封裝
不定參數(shù)是指函數(shù)可以接收不確定個(gè)數(shù)的參數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言中不定參數(shù)?...?的語法以及函數(shù)封裝的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01