一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++輸入流和輸出流 超級詳細

C++輸入流和輸出流 超級詳細

2022-01-12 14:11編程幫 C/C++

C++ 的開發者認為數據輸入和輸出的過程也是數據傳輸的過程,數據像水一樣從一個地方流動到另一個地方,所以 C++ 中將此過程稱為“流”,實現此過程的類稱為“流類”。下面小編將詳細介紹這個話題,需要的朋友可以參考一下

1、簡單介紹

C++ 又可以稱為“帶類的 C”,即可以理解為 C++ 是 C 語言的基礎上增加了面向對象(類和對象)。在此基礎上,學過 C 語言的讀者應該知道,它有一整套完成數據讀寫(I/O)的解決方案:

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

要知道,C 語言的這套 I/O 解決方案也適用于 C++ 程序,但 C++ 并沒有“偷懶”,它自己獨立開發了一套全新的 I/O 解決方案,其中就包含大家一直使用的 cin 和 cout。前面章節中,我們一直在用 cin 接收從鍵盤輸入的數據,用 cout 向屏幕上輸出數據(這 2 個過程又統稱為“標準 I/O”)。除此之外,C++ 也對從文件中讀取數據和向文件中寫入數據做了支持(統稱為“文件 I/O”)。

本質上來說,C++ 的這套 I/O 解決方案就是一個包含很多類的類庫(作為 C++ 標準庫的組成部分),這些類常被稱為“流類”。
C++ 的開發者認為數據輸入和輸出的過程也是數據傳輸的過程,數據像水一樣從一個地方流動到另一個地方,所以 C++ 中將此過程稱為“流”,實現此過程的類稱為“流類”。

下圖展示了 C++ 中用于實現數據輸入和輸出的這些流類以及它們之間的關系:

C++類庫中的流類:

C++輸入流和輸出流 超級詳細

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

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

  • istream:常用于接收從鍵盤輸入的數據;
  • ostream:常用于將數據輸出到屏幕上;
  • ifstream:用于讀取文件中的數據;
  • ofstream:用于向文件中寫入數據;
  • iostream:繼承自 istream ostream 類,因為該類的功能兼兩者于一身,既能用于輸入,也能用于輸出;
  • fstream:兼 ifstream ofstream 類功能于一身,既能讀取文件中的數據,又能向文件中寫入數據。

本章僅講解實現標準 I/O 操作的 istreamostream iostream 類,有關實現文件 I/O 操作的流類放到后續章節講解。

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

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

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

cout、cerr 和 clog 之間的區別如下:

  1. cout 除了可以將數據輸出到屏幕上,通過重定向(后續會講),還可以實現將數據輸出到指定文件中;而 cerr clog 都不支持重定向,它們只能將數據輸出到屏幕上;
  2. cout clog 都設有緩沖區,即它們在輸出數據時,會先將要數據放到緩沖區,等緩沖區滿或者手動換行(使用換行符 '\n' 或者 endl)時,才會將數據全部顯示到屏幕上;而 cerr 則不設緩沖區,它會直接將數據輸出到屏幕上。

除了以上 2 點特性上的不同之外,cerrclog cout 沒有任何不同。之所以我們常用 cout,是因為 cerr 和 clog 有各自不同的適用場景。以 cerr 為例,一旦程序某處使用 cerr 輸出數據,我們自然而然地會認為此處輸出的是警告或者錯誤信息。

值得一提的是,類似 cincout、cerr 和 clog 這樣,它們都是 C++ 標準庫的開發者創建好的,可以直接拿來使用,這種在 C++ 中提前創建好的對象稱為內置對象。實際上,<iostream> 頭文件中還聲明有處理寬字符的 4 個內置對象,分別為 wcin、wcout、wcerr 以及 wclog,由于不是本節重點,這里不再對它們做詳細講解。

如下程序演示了 cincoutcerr clog 的基本用法:

?
1
2
3
4
5
6
7
8
9
10
#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;
}

程序執行結果為:

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

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

它們的用法遠不止此,istream ostream 類提供了很多實用的函數,cincoutcerr clog 作為類對象,當然也能調用。

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

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

 

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

 

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

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

 

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

 

舉個例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main() {
    char url[30] = {0};
    //讀取一行字符串
    cin.getline(url, 30);
    //輸出上一條語句讀取字符串的個數
    cout << "讀取了 "<<cin.gcount()<<" 個字符" << endl;
    //輸出 url 數組存儲的字符串
    cout.write(url, 30);
    return 0;
}

程序執行結果為:

http://c.biancheng.net
讀取了 23 個字符
http://c.biancheng.net

注意:表 1 和表 2 中僅羅列了 istream ostream 類中常用的一些成員方法,關于這些方法的具體用法,后續章節會做詳細介紹。

到此這篇關于C++輸入流和輸出流 超級詳細的文章就介紹到這了,更多相關C++輸入流和輸出流內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:http://c.biancheng.net/view/7559.html

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
主站蜘蛛池模板: 免费一级特黄特色大片∵黄 | 色老板在线免费观看 | 日韩精品中文字幕视频一区 | 天若有情1992国语版完整版 | 国产女主播在线播放一区二区 | 天作谜案免费完整版在线观看 | 动漫人物差差差动漫人物免费观看 | 奇米影视小说 | 国产91精品区| 日本高清在线播放一区二区三区 | chinese男性厕所撒尿合集 | 草草草在线 | 国产一区二区三区欧美精品 | 成年视频在线观看免费 | 爱操综合网 | 男神插曲女生动漫完整版动漫 | 天天干天天操天天碰 | 日韩高清一区二区三区不卡 | 成年女人毛片免费观看中文w | 边打电话边操 | 青青草国产青春综合久久 | 99热在线观看免费 | 美女被绑着吸下部的故事 | voyeur 中国女厕 亚洲女厕 | 免费网址在线观看入口推荐 | 亚洲一区二区三区免费视频 | 久久中文字幕免费高清 | 美女的让男人桶爽30分钟的 | 天堂在线中文字幕 | 东方影视欧美天天影院 | 久久热这里只有 精品 | juliaann主妇疯狂 | 青青草一区二区免费精品 | 四缺一小说 | k逼| 亚洲爱视频 | 国产乱码一卡二卡3卡四卡 国产乱插 | 成人久久伊人精品伊人 | 青草青草伊人精品视频 | 欧美一区二区三区免费观看视频 | 精品一区二区三区自拍图片区 |