亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

【C++ Primer plus 第6版】學習筆記二十八——文件輸入/輸出

2019-11-08 01:35:40
字體:
來源:轉載
供稿:網友

文件輸入輸出

文本I/O和文本文件

  使用cin進行輸入時,程序將輸入視為一系列的字節,其中每個字節都被解釋為字符編碼。不管目標數據類型是什么,輸入一開始都是字符數據——文本數據。然后,cin對象負責將文本轉換為其他類型。      假設有如下示例輸入行:

38.5 19.2

來看一下使用不同數據類型的變量來存儲時,cin是如何處理輸入行的。    char類型

char ch;cin >> ch;

輸入行中的第一個字符被賦給ch。在這里,第一個字符是數字3,其字符編碼(二進制)被存儲在變量ch中。輸入和目標變量都是字符,因此不需要進行轉換。注意這里存儲的是字符3的編碼。執行上述輸入語句后,輸入隊列中的下一個字符為字符8,下一個輸入操作將對其進行處理。    int類型

int n;cin >> n;

在這種情況下,cin將不斷讀取,直到遇到非數字字符。也就是說,它將讀取3和8,這樣句點將成為輸入隊列中的下一個字符。cin通過計算發現,這兩個字符對應數值38,因此將38的二進制字符復制到變量n中。   double類型

double x;cin >> x;

在這種情況下,cin將不斷讀取,直到遇到第一個不屬于浮點數的字符。也就是說,cin讀取3、8、句點和5,使得空格成為輸入隊列中的下一個字符。cin通過計算發現,這四個字符對應于數值38.5,因此將38.5的二進制編碼(浮點格式)復制到變量x中。

   char數組

char Word[50];cin >> word;

在這種情況下,cin將不斷讀取,直到遇到空白字符。也就是說,它讀取3、8、句點和5,使得空格成為輸入隊列中下一個字符。然后,cin將這4個字符的編碼存儲到數組word中,并在末尾加上一個空字符。這里不需要進行任何轉換。

最后,來看一下另一種使用char數組來存儲輸入的情況:

char word[50];cin.getline(word,50);

在這種情況下,cin將不斷讀取,直到遇到換行符(示例輸入行少于50個字符)。所有字符都被存儲到數組word中,并在末尾加上一個空字符。換行符被丟棄,輸入隊列中的下一個字符是下一行中的第一個字符。這里不需要進行任何轉換。    本文討論的文件I/O僅適用于文本文件。


寫入到文本文件中

  對于文件輸入,C++使用類似于cout的東西。使用cout要注意以下幾點:

必須包含頭文件iostream頭文件iostream定義了一個用于處理輸出的ostream類頭文件iostream聲明了一個名為cout的ostream變量(對象)必須指明名稱空間std

可以結合使用cout和運算符<<來顯示各種類型的數據

  文件輸出與此極其類似:

必須包含頭文件fstream頭文件fstream定義了一個用于處理輸出的ofstream類需要聲明一個或多個ofstream類(對象),并以自己喜歡的方式對其進行命名,條件是遵守常用的命名規則必須指明名稱空間std需要將ofstream對象與文件關聯起來。為此,方法之一是使用open()方法使用完文件后,應使用方法close()將其關閉

可結合使用ofstream對象和運算符<<來輸出各種類型的數據

  注意:雖然頭文件iostream提供了一個預先定義好的名為cout的ostream對象,但我們必須聲明自己的ofstream對象,為其命名,并將其同文件關聯起來:

聲明對象:

ofstream outFile;ofstream fout;

將這種對象與特定的文件關聯起來:

outFile.open("fish.txt"); //outFile用于寫入fish.txtchar filename[50];cin >> filename; //用戶指定一個名字fout.open(filename); //fout用于讀取特定文件

  注意,方法open()接受一個C-風格字符串作為參數,這可以是一個字面字符串,也可以是存儲在數組中的字符串。

下面演示了如何使用這種對象:

double wt = 125.8;outFile << wt; //將一個數字寫入fish.txtchar line[81] = "Objects are closer than they appear.";fout << line << endl; //寫入一行文本

重要的是,聲明一個ofstream對象并將其同文件關聯起來后,便可以像使用cout那樣使用它。所有可用于cout的操作和方法(如<<、endl和setf())都可用于ofstream對象(如前述示例中的outFile和fout)。

使用文件輸出的主要步驟如下:

包含頭文件fstream創建一個ofstream對象將該ofstream對象同一個文件關聯起來像使用cout那樣使用該ofstream對象

程序6.15

#include<iostream>#include<fstream>int main(){ using namespace std; char automobile[50]; int year; double a_PRice; double d_price; ofstream outFile; outFile.open("carinfo.txt"); cout << "Enter the make and model of automobile: "; cin.getline(automobile, 50); cout << "Enter the model year: "; cin >> year; cout << "Enter the orginal asking price: "; cin >> a_price; d_price = 0.913 * a_price; cout << fixed; cout.precision(2); cout.setf(ios_base::showpoint); cout << "Make and model: " << a_price << endl; cout << "Year: " << year << endl; cout << "Was asking $" << a_price << endl; cout << "Now asking $" << d_price << endl; outFile << fixed; outFile.precision(2); outFile.setf(ios_base::showpoint); outFile << "Make and model: " << a_price << endl; outFile << "Year: " << year << endl; outFile << "Was asking $" << a_price << endl; outFile << "Now asking $" << d_price << endl; outFile.close(); system("pause"); return 0;}

程序使用完文件后,應使用close()將其關閉。close()不需要文件名作為參數,因為outFile已經同特定的文件關聯起來。

程序運行之前,carinfo.txt并不存在,這種情況下,open()將新建一個名為carinfo.txt的文件。如果文件carinfo.txt已經存在,open()將清空該文件,再將新的輸出寫入到該文件中。


讀取文本文件

讀取文本文件是基于控制臺輸入的。 控制臺輸入涉及以下方面:

必須包含頭文件iostream頭文件iostream定義了一個用于處理輸入的istream類頭文件iostream聲明了一個名為cin的istream對象必須指明名稱空間std,using namespace std可以結合使用cin和運算符>>來讀取各種類型的數據可以使用cin和get()來讀取一個字符,使用cin和getline()來讀取一行字符對象cin本身被用作測試條件時,如果最后一個讀取操作成功,將被轉換為bool值true,否則為false

文件輸出:

必須包含頭文件fstream頭文件fstream定義了一個用于處理文件讀取的ifstream類需要聲明一個或多個ifstream對象,并以合法的方式對其進行命名必須指明名稱空間std,using namespace std需要將ifstream對象與文件關聯起來,一種方法是使用open()使用完文件后,應使用close()將文件關閉可以結合使用ifstream對象和運算符>>來讀取各種類型的數據可以使用ifstream對象和get()來讀取一個字符,使用ifstream對象和getline()來讀取一行字符可以結合使用ifstream對象和eof()、fail()等方法來判斷輸入是否成功ifstream對象本身被用作測試條件時,如果最后一個讀取操作成功,將被轉換為bool值true,否則為false

聲明ifstream對象:

ifstream inFile;ifstream fin;

將ifstream對象與特定的文件關聯起來:

inFile.open("bowling.txt");char filename[50];cin >> filename;fin.open(filename);

  注意,方法open()接受一個C-風格字符串作為參數,這可以是一個字面字符串,也可以是存儲在數組中的字符串。

使用ifstream對象:

double wt;inFile >> wt;char line[81];fin.getline(line, 81);

重要的是,聲明一個ifstream對象并將其同文件關聯起來后,便可以像使用cin那樣使用它。所有可用于cin的操作和方法都可用于ifstream對象(如前述示例中的inFile和fin)。

如果試圖打開一個不存在的文件作為輸入,將導致后面使用ifstream對象進行輸入時失敗。檢查文件是否被成功打開的方法是使用is_open():

inFile.open("bowling.txt");if (!inFile.is_open()){ exit(EXIT_FAILURE);}

函數exit()的原型是在頭文件cstdlib中定義的,在該頭文件中,還定義了一個用于同操作系統通信的參數值EXIT_FAILURE。函數exit()終止程序。

程序6.16

#include<iostream>#include<fstream>#include<cstdlib>const int SIZE = 60;int main(){ using namespace std; char filename[SIZE]; ifstream inFile; cout << "Enter name of data file: "; cin.getline(filename, SIZE); 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 reson./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(); system("pause"); return 0;}

檢查文件是否被成功打開至關重要。

good()在沒有任何錯誤發生時返回true。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产91久久久久久| 亚洲精品xxxx| 91极品视频在线| 日韩视频免费在线观看| 中国日韩欧美久久久久久久久| 国产精品一区电影| 91久久精品国产91性色| 欧美一区二区视频97| 91久久综合亚洲鲁鲁五月天| 欧美大学生性色视频| 最近的2019中文字幕免费一页| 久久国产精品影视| 国产精品视频久久久| 欧美国产日韩视频| 色狠狠av一区二区三区香蕉蜜桃| 国产精品吹潮在线观看| 亚洲人成网7777777国产| 日本精品va在线观看| 久久久久一本一区二区青青蜜月| 伊人一区二区三区久久精品| 欧美洲成人男女午夜视频| 精品日韩视频在线观看| www.久久久久久.com| 国产精品一区二区三区成人| 91国语精品自产拍在线观看性色| 欧美大秀在线观看| 久久久精品中文字幕| 精品久久香蕉国产线看观看亚洲| 97在线精品国自产拍中文| 欧美另类在线观看| 亚洲va欧美va在线观看| 亚洲欧美日韩在线一区| 亚洲黄色成人网| www亚洲精品| 日韩美女写真福利在线观看| 欧美精品制服第一页| 亚洲视频欧美视频| 日本19禁啪啪免费观看www| 久久久久久亚洲精品| 欧美人在线观看| 欧美午夜激情视频| 亚洲欧美日韩国产成人| 另类专区欧美制服同性| 日韩欧美在线中文字幕| 不卡在线观看电视剧完整版| 亚洲欧美另类在线观看| 欧美国产高跟鞋裸体秀xxxhd| 欧美高清不卡在线| 大桥未久av一区二区三区| 精品在线小视频| 久久精品视频免费播放| 精品国产91乱高清在线观看| 久久久成人的性感天堂| 亚洲成成品网站| 992tv成人免费视频| 国产99视频在线观看| 91视频国产高清| 性欧美xxxx视频在线观看| 91亚洲国产精品| 久久久精品2019中文字幕神马| 亚洲福利视频久久| 欧美整片在线观看| 日日骚av一区| 深夜福利亚洲导航| 亚洲精品日韩欧美| 国产精品亚洲自拍| 久久久国产精品x99av| 欧美在线观看日本一区| 91九色精品视频| 亚洲视频在线视频| 丝袜亚洲欧美日韩综合| 成人a视频在线观看| 亚洲女性裸体视频| 国产视频精品xxxx| 性欧美长视频免费观看不卡| 欧美一区二区三区艳史| 91av中文字幕| 欧美电影电视剧在线观看| 精品免费在线观看| 色妞欧美日韩在线| 亚洲国产精品久久91精品| 国产成人精品综合久久久| 欧美日韩在线免费| 久久久久久欧美| 亚洲福利在线播放| 中文字幕九色91在线| 久久在线免费观看视频| 久久免费精品日本久久中文字幕| 成人免费视频a| 中文字幕精品一区二区精品| 日韩欧美国产高清91| 久久精品欧美视频| 久热国产精品视频| 欧美成人sm免费视频| 亚洲欧美成人网| 美女撒尿一区二区三区| 久久久av电影| 91在线无精精品一区二区| 亚洲成av人影院在线观看| 国产精品电影观看| 成人夜晚看av| 国产精品青草久久久久福利99| 久久露脸国产精品| 日韩欧美一区二区三区| 日韩av在线高清| 久久久最新网址| 精品中文字幕在线| 国产精品久久久久久久久| 日韩成人在线电影网| 在线观看成人黄色| 日韩av三级在线观看| 日本精品久久久| 亚洲激情视频在线观看| 深夜福利国产精品| 久久久精品在线观看| 亚洲国产婷婷香蕉久久久久久| 国产精品嫩草影院久久久| 国产视频久久久久久久| 国产精品丝袜视频| 亚洲欧美日韩天堂一区二区| 日韩成人av网| 精品国产区一区二区三区在线观看| 欧美日韩国产丝袜另类| 一区二区三区日韩在线| 精品欧美激情精品一区| 成人a级免费视频| 国产日韩欧美91| 亚洲精品一区久久久久久| 国产精品一区二区久久| 欧美在线亚洲在线| 奇米成人av国产一区二区三区| 日韩成人av在线播放| 国产亚洲欧美日韩一区二区| 欧美另类高清videos| 欧美激情亚洲综合一区| 日韩精品视频在线观看网址| 亚州欧美日韩中文视频| 裸体女人亚洲精品一区| 久热爱精品视频线路一| 欧美性理论片在线观看片免费| 国产一区二区三区日韩欧美| 日韩精品视频中文在线观看| 国产盗摄xxxx视频xxx69| 成人精品福利视频| 国产精品无码专区在线观看| 精品国产91久久久久久| 中文字幕最新精品| 欧美日韩在线另类| 国内精品久久久久影院 日本资源| 午夜精品www| 精品高清美女精品国产区| 国产成人精品一区| 18一19gay欧美视频网站| 亚洲一区二区黄| 亚洲美女在线观看| 91精品久久久久久久久| 日韩风俗一区 二区| 欧美www视频在线观看| 成人福利网站在线观看11| 亚洲精品国产电影| 日韩精品福利网站| 日韩美女免费视频| 日韩中文字幕在线| 亚洲国产一区二区三区四区|