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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++中istream的使用

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中istream的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在項目中會經常用到讀取一些配置數據,這些數據根據實際需要有可能會調整,如果將這些數據直接嵌入進代碼中會非常不便,需要經常調整代碼。將這些數據寫入配置文件中然后在讀入,如果需要調整,只需修改配置文件,code不用作任何改動,這樣會非常方便。最常用到的讀取配置文件的方式是使用istream類。

std::istream: input stream. Input stream objects can read and interpret input from sequences of characters. The standard object cin?is an object of this type.

標準中定義的std::cin就是istream類型。istream是std::basic_istream類模板的一個實例化。

c++中定義的標準輸入輸出流是istream和ostream,他們是iostream類的父類,而cin是istream的對象,cout是ostream的對象。頭文件fstream(對文件操作的流)包含了ifstream和ofstream,頭文件sstream(對字符串操作的流)包含了istringstream和ostringstream,這些類都是繼承自istream和ostream的。它們的關系如下圖:

有兩種情況會使一個istream對象的bool轉型為false:讀到EOF(文件結束標志)或遇到一個無效的值(輸入流進入fail狀態)。istream對象的bool轉型為false的情況下,此后的所有讀入動作都是無操作。直到調用istream對象的成員函數clear()來清除該對象的內部狀態。

缺省情況下,輸入操作符丟棄空白符、空格符、制表符、換行符以及回車。如果希望讀入上述字符,或讀入原始的輸入數據,一種方法是使用istream的get()成員函數來讀取一個字符,另一種方法是使用istream的getline()成員函數來讀取多個字符。istream的read(char* addr, streamsize size)函數從輸入流中提取size個連續的字節,并將其放在地址從addr開始的內存中。istream成員函數gcount()返回由最后的get()、getline()、read()調用實際提取的字符數。read()一般多用在讀取二進制文件,讀取塊數據。

輸入流有三個函數來測試流狀態:即bad(),fail()和eof()。ignore()用來拋掉指定個數的緩沖區中的字節。如果bad()為真,代表是遇到了系統級的故障。如果fail()為真,則表示輸入了非法的字符。

其它的istream成員函數:putback( char c ) 將字符放回iostream;unget()往回重置”下一個”istream項;peek()返回下一個字符或EOF,但不要提取出來。

以下是測試代碼:

#include <iostream>
#include <fstream>
#include <string>
#include "istream.hpp"void test_istream()
{//std::istringstreamstd::filebuf in;if (!in.open("E:/GitCode/Messy_Test/testdata/istream.data", std::ios::in)) {std::cout << "fail to open file" << std::endl;return;}std::istream iss(&in);std::string str;int count = 0;while (!iss.eof()) {if (iss.bad()) {std::cout << "input stream corrupted" << std::endl;break;}if (iss.fail()) {std::cout << "bad data" << std::endl;iss.clear(std::istream::failbit);iss.ignore(256, '\n');continue;}std::getline(iss, str);if (str == "#filename:") {iss >> str;std::cout << "file name: " << str << std::endl;}if (str == "#content:") {std::getline(iss, str);std::cout << "file content: " << str << std::endl;}if (str == "#add operation:") {int a, b;iss >> a >> b;std::cout << "a + b = " << (a + b) << std::endl;}if (str == "#char array:") {char a, b, c, d, e, f;iss >> a >> b >> c >> d >> e >> f;std::cout << a << "  " << b << "  " << c << "  " << d << "  " << e << "  " << f << std::endl;}if (str == "#int array:") {int arr[2][3];for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {iss >> arr[i][j];}}for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {std::cout << arr[i][j] << "    ";}std::cout << std::endl;}}if (str == "#mean value:") {float mean_value;iss >> mean_value;std::cout << "mean_value = " << mean_value << std::endl;}}in.close();
}

執行結果如下圖:

主要參考文獻:

1.?http://www.cplusplus.com/reference/istream/istream/

2.?http://www.zaojiahua.com/inputoutput-stream.html?

GitHub:https://github.com/fengbingchun/Messy_Test

?

總結

以上是生活随笔為你收集整理的C++中istream的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:C++中istream的使用