最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++輸入流和輸出流 超級(jí)詳細(xì)

 更新時(shí)間:2021年09月26日 17:33:12   作者:編程幫  
C++ 的開(kāi)發(fā)者認(rèn)為數(shù)據(jù)輸入和輸出的過(guò)程也是數(shù)據(jù)傳輸?shù)倪^(guò)程,數(shù)據(jù)像水一樣從一個(gè)地方流動(dòng)到另一個(gè)地方,所以 C++ 中將此過(guò)程稱為“流”,實(shí)現(xiàn)此過(guò)程的類稱為“流類”。下面小編將詳細(xì)介紹這個(gè)話題,需要的朋友可以參考一下

1、簡(jiǎn)單介紹

C++ 又可以稱為“帶類的 C”,即可以理解為 C++ 是 C 語(yǔ)言的基礎(chǔ)上增加了面向?qū)ο螅惡蛯?duì)象)。在此基礎(chǔ)上,學(xué)過(guò) C 語(yǔ)言的讀者應(yīng)該知道,它有一整套完成數(shù)據(jù)讀寫(xiě)(I/O)的解決方案:

使用 scanf() 、gets() 等函數(shù)從鍵盤(pán)讀取數(shù)據(jù),使用 printf() 、puts() 等函數(shù)向屏幕上輸出數(shù)據(jù);
使用 fscanf() 、fgets() 等函數(shù)讀取文件中的數(shù)據(jù),使用 fprintf()fputs() 等函數(shù)向文件中寫(xiě)入數(shù)據(jù)。

要知道,C 語(yǔ)言的這套 I/O 解決方案也適用于 C++ 程序,但 C++ 并沒(méi)有“偷懶”,它自己獨(dú)立開(kāi)發(fā)了一套全新的 I/O 解決方案,其中就包含大家一直使用的 cin 和 cout。前面章節(jié)中,我們一直在用 cin 接收從鍵盤(pán)輸入的數(shù)據(jù),用 cout 向屏幕上輸出數(shù)據(jù)(這 2 個(gè)過(guò)程又統(tǒng)稱為“標(biāo)準(zhǔn) I/O”)。除此之外,C++ 也對(duì)從文件中讀取數(shù)據(jù)和向文件中寫(xiě)入數(shù)據(jù)做了支持(統(tǒng)稱為“文件 I/O”)。

本質(zhì)上來(lái)說(shuō),C++ 的這套 I/O 解決方案就是一個(gè)包含很多類的類庫(kù)(作為 C++ 標(biāo)準(zhǔn)庫(kù)的組成部分),這些類常被稱為“流類”。
C++ 的開(kāi)發(fā)者認(rèn)為數(shù)據(jù)輸入和輸出的過(guò)程也是數(shù)據(jù)傳輸?shù)倪^(guò)程,數(shù)據(jù)像水一樣從一個(gè)地方流動(dòng)到另一個(gè)地方,所以 C++ 中將此過(guò)程稱為“流”,實(shí)現(xiàn)此過(guò)程的類稱為“流類”。

下圖展示了 C++ 中用于實(shí)現(xiàn)數(shù)據(jù)輸入和輸出的這些流類以及它們之間的關(guān)系:

C++類庫(kù)中的流類:

其中,圖中的箭頭代表各個(gè)類之間的派生關(guān)系。比如,ios 是所有流類的基類,它派生出 istream ostream。特別需要指出的是,為了避免多繼承的二義性,從 ios 派生出 istream ostream 時(shí),均使用了 virtual 關(guān)鍵字(虛繼承)。

上圖 中這些流類各自的功能分別為:

  • istream:常用于接收從鍵盤(pán)輸入的數(shù)據(jù);
  • ostream:常用于將數(shù)據(jù)輸出到屏幕上;
  • ifstream:用于讀取文件中的數(shù)據(jù);
  • ofstream:用于向文件中寫(xiě)入數(shù)據(jù);
  • iostream:繼承自 istream ostream 類,因?yàn)樵擃惖墓δ芗鎯烧哂谝簧?,既能用于輸入,也能用于輸出?/li>
  • fstream:兼 ifstream ofstream 類功能于一身,既能讀取文件中的數(shù)據(jù),又能向文件中寫(xiě)入數(shù)據(jù)。

本章僅講解實(shí)現(xiàn)標(biāo)準(zhǔn) I/O 操作的 istream、ostream iostream 類,有關(guān)實(shí)現(xiàn)文件 I/O 操作的流類放到后續(xù)章節(jié)講解。

2、C++輸入流和輸出流

在前面章節(jié)的學(xué)習(xí)中,只要涉及輸入或者輸出數(shù)據(jù),我們立馬想到的就是 cin cout。其實(shí),cin 就是 istream 類的對(duì)象,cout ostream 類的對(duì)象,它們都聲明在 <iostream> 頭文件中,這也解釋了“為什么在 C++ 程序中引入 <iostream> 就可以使用 cin 和 cout”(當(dāng)然使用 cin 和 cout,還需要聲明 std 命名空間)。

除此之外,<iostream> 頭文件中還聲明有 2 個(gè) ostream 類對(duì)象,分別為 cerr clog。它們的用法和 cout 完全一樣,但 cerr 常用來(lái)輸出警告和錯(cuò)誤信息給程序的使用者,clog 常用來(lái)輸出程序執(zhí)行過(guò)程中的日志信息(此部分信息只有程序開(kāi)發(fā)者看得到,不需要對(duì)普通用戶公開(kāi))。

cout、cerr 和 clog 之間的區(qū)別如下:

  1. cout 除了可以將數(shù)據(jù)輸出到屏幕上,通過(guò)重定向(后續(xù)會(huì)講),還可以實(shí)現(xiàn)將數(shù)據(jù)輸出到指定文件中;而 cerr clog 都不支持重定向,它們只能將數(shù)據(jù)輸出到屏幕上;
  2. cout clog 都設(shè)有緩沖區(qū),即它們?cè)谳敵鰯?shù)據(jù)時(shí),會(huì)先將要數(shù)據(jù)放到緩沖區(qū),等緩沖區(qū)滿或者手動(dòng)換行(使用換行符 '\n' 或者 endl)時(shí),才會(huì)將數(shù)據(jù)全部顯示到屏幕上;而 cerr 則不設(shè)緩沖區(qū),它會(huì)直接將數(shù)據(jù)輸出到屏幕上。

除了以上 2 點(diǎn)特性上的不同之外,cerrclog cout 沒(méi)有任何不同。之所以我們常用 cout,是因?yàn)?cerr 和 clog 有各自不同的適用場(chǎng)景。以 cerr 為例,一旦程序某處使用 cerr 輸出數(shù)據(jù),我們自然而然地會(huì)認(rèn)為此處輸出的是警告或者錯(cuò)誤信息。

值得一提的是,類似 cin、cout、cerr 和 clog 這樣,它們都是 C++ 標(biāo)準(zhǔn)庫(kù)的開(kāi)發(fā)者創(chuàng)建好的,可以直接拿來(lái)使用,這種在 C++ 中提前創(chuàng)建好的對(duì)象稱為內(nèi)置對(duì)象。實(shí)際上,<iostream> 頭文件中還聲明有處理寬字符的 4 個(gè)內(nèi)置對(duì)象,分別為 wcin、wcout、wcerr 以及 wclog,由于不是本節(jié)重點(diǎn),這里不再對(duì)它們做詳細(xì)講解。

如下程序演示了 cin、cout、cerr clog 的基本用法:

#include <iostream>
#include <string>
int main() {
    std::string url;
    std::cin >> url;
    std::cout << "cout:" << url << std::endl;
    std::cerr << "cerr:" << url << std::endl;
    std::clog << "clog:" << url << std::endl;
    return 0;
}


程序執(zhí)行結(jié)果為:

http://c.biancheng.net
cout:http://c.biancheng.net
cerr:http://c.biancheng.net
clog:http://c.biancheng.net

注意:此程序中并沒(méi)有考慮 cerr clog 各自特有的含義,這里僅是為了演示 cerr clog 的基礎(chǔ)用法,不建議讀者這樣使用。另外,如果程序中 std 命名空間提前聲明,則所有的 std:: 可以省略。

它們的用法遠(yuǎn)不止此,istream ostream 類提供了很多實(shí)用的函數(shù),cin、cout、cerr clog 作為類對(duì)象,當(dāng)然也能調(diào)用。

表 1 羅列了 cin 對(duì)象常用的一些成員方法以及它們的功能:

表 1 C++ cin 輸入流對(duì)象常用成員方法

成員方法名 功能
getline(str,n,ch) 從輸入流中接收 n-1 個(gè)字符給 str 變量,當(dāng)遇到指定 ch 字符時(shí)會(huì)停止讀取,默認(rèn)情況下 ch 為 '\0'。
get() 從輸入流中讀取一個(gè)字符,同時(shí)該字符會(huì)從輸入流中消失。
gcount()  返回上次從輸入流提取出的字符個(gè)數(shù),該函數(shù)常和 get()、getline()、ignore()、peek()、read()、readsome()、putback() 和 unget() 聯(lián)用。
peek() 返回輸入流中的第一個(gè)字符,但并不是提取該字符。
putback(c)  將字符 c 置入輸入流(緩沖區(qū))。
ignore(n,ch) 從輸入流中逐個(gè)提取字符,但提取出的字符被忽略,不被使用,直至提取出 n 個(gè)字符,或者當(dāng)前讀取的字符為 ch。
operator>> 重載 >> 運(yùn)算符,用于讀取指定類型的數(shù)據(jù),并返回輸入流對(duì)象本身。

表 2 羅列了 cout、cerr 和 clog 對(duì)象常用的一些成員方法以及它們的功能:

 表 2 C++ cout 輸出流對(duì)象常用成員方法

成員方法名 功能
put() 輸出單個(gè)字符。
write() 輸出指定的字符串。
tellp() 用于獲取當(dāng)前輸出流指針的位置。
seekp() 設(shè)置輸出流指針的位置。
flush() 刷新輸出流緩沖區(qū)。
operator<< 重載 << 運(yùn)算符,使其用于輸出其后指定類型的數(shù)據(jù)。

舉個(gè)例子:

#include <iostream>
using namespace std;
int main() {
    char url[30] = {0};
    //讀取一行字符串
    cin.getline(url, 30);
    //輸出上一條語(yǔ)句讀取字符串的個(gè)數(shù)
    cout << "讀取了 "<<cin.gcount()<<" 個(gè)字符" << endl;
    //輸出 url 數(shù)組存儲(chǔ)的字符串
    cout.write(url, 30);
    return 0;
}


程序執(zhí)行結(jié)果為:

http://c.biancheng.net
讀取了 23 個(gè)字符
http://c.biancheng.net

注意:表 1 和表 2 中僅羅列了 istream ostream 類中常用的一些成員方法,關(guān)于這些方法的具體用法,后續(xù)章節(jié)會(huì)做詳細(xì)介紹。

到此這篇關(guān)于C++輸入流和輸出流 超級(jí)詳細(xì)的文章就介紹到這了,更多相關(guān)C++輸入流和輸出流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解strcpy與memcpy的區(qū)別

    深入理解strcpy與memcpy的區(qū)別

    本篇文章是對(duì)strcpy與memcpy的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c語(yǔ)言沒(méi)有try catch的替代方案

    c語(yǔ)言沒(méi)有try catch的替代方案

    這篇文章主要介紹了c語(yǔ)言沒(méi)有try catch的替代方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • C/C++ 多線程的學(xué)習(xí)心得總結(jié)

    C/C++ 多線程的學(xué)習(xí)心得總結(jié)

    本篇文章是對(duì)C/C++中多線程的學(xué)習(xí)心得總結(jié)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c++11新特性多線程操作實(shí)戰(zhàn)

    c++11新特性多線程操作實(shí)戰(zhàn)

    這篇文章主要介紹了c++11新特性多線程操作實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • CMake中使用vcpkg的實(shí)現(xiàn)

    CMake中使用vcpkg的實(shí)現(xiàn)

    本文主要介紹了CMake中使用vcpkg的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 基于C語(yǔ)言構(gòu)建一個(gè)獨(dú)立棧協(xié)程和共享?xiàng)f(xié)程的任務(wù)調(diào)度系統(tǒng)

    基于C語(yǔ)言構(gòu)建一個(gè)獨(dú)立棧協(xié)程和共享?xiàng)f(xié)程的任務(wù)調(diào)度系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了如何基于C語(yǔ)言構(gòu)建一個(gè)獨(dú)立棧協(xié)程和共享?xiàng)f(xié)程的任務(wù)調(diào)度系統(tǒng),文中的示例代碼講解詳細(xì),需要的可以參考下
    2024-02-02
  • 基于Qt實(shí)現(xiàn)系統(tǒng)主題感知功能

    基于Qt實(shí)現(xiàn)系統(tǒng)主題感知功能

    在現(xiàn)代桌面應(yīng)用程序開(kāi)發(fā)中,系統(tǒng)主題感知是一項(xiàng)重要的功能,它使得應(yīng)用程序能夠根據(jù)用戶的系統(tǒng)主題設(shè)置(如深色模式或淺色模式)自動(dòng)調(diào)整其外觀,Qt 作為一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序開(kāi)發(fā)框架,提供了豐富的工具和類來(lái)實(shí)現(xiàn)這一功能,需要的朋友可以參考下
    2024-12-12
  • Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用

    Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用

    本文主要介紹了Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用,這些關(guān)聯(lián)容器在Qt中提供了靈活而強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)選項(xiàng),根據(jù)具體的需求和使用場(chǎng)景,您可以選擇適合的容器來(lái)存儲(chǔ)和管理數(shù)據(jù),感興趣的可以了解一下
    2023-09-09
  • C C++ 算法實(shí)例大全

    C C++ 算法實(shí)例大全

    這篇文章主要介紹了C C++ 算法實(shí)例大全,里面大量的實(shí)例介紹,學(xué)習(xí)c語(yǔ)言的朋友可以收藏
    2016-12-12
  • 錯(cuò)誤:sem_union的存儲(chǔ)大小未知問(wèn)題的解決方法

    錯(cuò)誤:sem_union的存儲(chǔ)大小未知問(wèn)題的解決方法

    這篇文章主要介紹了錯(cuò)誤:sem_union的存儲(chǔ)大小未知問(wèn)題的解決方法,需要的朋友可以參考下
    2016-10-10

最新評(píng)論

大荔县| 綦江县| 宽城| 正安县| 浦东新区| 富宁县| 荔波县| 崇礼县| 咸宁市| 监利县| 沙洋县| 什邡市| 监利县| 澎湖县| 临洮县| 喜德县| 新竹市| 金塔县| 巫溪县| 灵武市| 宁远县| 淮阳县| 饶阳县| 利辛县| 图片| 临邑县| 邻水| 衢州市| 汶川县| 浠水县| 新巴尔虎左旗| 永清县| 涞源县| 庆元县| 榆社县| 进贤县| 砀山县| 滕州市| 赣榆县| 辽阳市| 乌审旗|