MOOC C++筆記(七)輸入輸出流

来源:https://www.cnblogs.com/z-y-k/archive/2019/10/30/11767792.html
-Advertisement-
Play Games

輸入輸出流 與輸入輸出流操作相關的類 istream:是用於輸入的流類,cin就是該類的對象。 ostream:是用於輸出的流類,cout就是該類的對象。 ifstream:是用於從文件讀取數據的類。 ofstream:是用與向文件寫入數據的類。 iostream:是既能用於輸入,又能用於輸出的類。 ...


輸入輸出流

與輸入輸出流操作相關的類

TIM截圖20191030205008.png
istream:是用於輸入的流類,cin就是該類的對象。
ostream:是用於輸出的流類,cout就是該類的對象。
ifstream:是用於從文件讀取數據的類。
ofstream:是用與向文件寫入數據的類。
iostream:是既能用於輸入,又能用於輸出的類。
fstream:是既能從文件讀取數據,又能向文件寫入數據的類。

標準流對象

輸入流對象:cin 與標準輸入設備相連
輸出流對象:cout 與標準輸出設備相連
cerr 與標準錯誤輸出設備相連
clog 與標準錯誤輸出設備相連
預設情況下
cerr<<"hello,world"<<endlclog<<"hello,world"<<endl
cout<<"hello,world"<<endl一樣
cin對應於標準輸入流,用於從鍵盤讀取數據,也可以被重定向為從文件中讀取數據。
cout對應於標準輸出流,用於向屏幕輸出數據,也可以被重定向為向文件寫入數據。
cerr對應於標準錯誤輸出流,用於向屏幕輸出出錯信息。
clog對應於標準錯誤輸出流,用於向屏幕輸出出錯信息。
cerr和clog的區別在於cerr不適用緩衝區,直接向顯示器輸出信息;而輸出到clog中的信息先會被存放在緩衝區,緩衝區滿或者刷新時才輸出到屏幕。

重定向

freopen函數可以用於輸入輸出重定向

#include<iostream>  
using namespace std;
int main(){
    int x,y;
    cin>>x>>y;
    freopen("test.txt","w",stdout);//將標準輸出重定向到test.txt文件  
    if(y==0)
        cerr<<"error"<<endl;
    else
        cout<<x/y;
    return 0;
}
#include<iostream>  
using namespace std;
int main(){
    double f;
    int n;
    freopen("test.txt","r",stdout);//cin被改為從t.txt中讀取數據  
    cin>>f>>n;
    return 0;
}

判斷輸入流結束

可以用如下方法判斷輸入流結束:
while(cin>>x){}
如果是從文件輸入,讀到文件尾部,輸入流就算結束。
如果從鍵盤輸入,則在單獨一行輸入Ctrl+Z代表輸入流結束。

istream類的成員函數

getline函數

istream&getline(char *buf,int bufSize);
從輸入流中讀取bufSize-1個字元到緩衝區buf,或讀到碰到'\n'為止(哪個先到算哪個)。
istream&getline(char *buf,int bufSize,char delim)
從輸入流中讀取bufSize-1個字元到緩衝區buf,或讀到碰到delim字元為止(哪個先到算哪個)。
兩個函數都會自動在buf中讀入數據的結尾添加'\0'。'\n'或delim都不會被讀入buf,但會被從輸入流中取走。如果輸入流中'\n'或delim之前的字元個數達到或超過了buf'Size個,就導致讀入出錯,其結果就是:雖然本次讀入已經完成,但是之後的讀入就都會失敗了。
可以用if(!cin.getline(...))判斷輸入是否結束。

eof函數

bool eof()
判斷輸入流是否結束

peek函數

int peek()
返回下一個字元,但不從流中去掉。

putback函數

istream &putback(char c)
將字元ch放回輸入流

ignore函數

istream&ignore(int nCount=1,int delim=EOF);
從流中刪掉最多nCount個字元,遇到EOF時結束。

流操縱運算元(格式化輸出)

整數流的基數:流操縱運算元dec,oct,hex,setbase
浮點數的精度(precision,setprecision)
設置域寬(setw,width)
用戶自定義的流操縱運算元
使用流操縱運算元
註意:使用流操縱運算元需要#include<iomanip>

控制整數流的基數的流操縱運算元

流操縱運算元dec,oct,hex

int n=10;  
cout<<n<<endl;  
cout<<hex<<n<<"\n"//十六進位輸出  
       <<dec<<n<<"\n"//十進位輸出
       <<oct<<n<<endl;//八進位輸出

輸出結果:
10
a
10
12

控制浮點數精度的流操縱運算元

precision,setprecision
precision是成員函數,調用方式為:cout.precision(5)
setprecision是流操縱運算元,其調用方式為: cout<<setprecision(5);//可以連續輸出
它們的功能相同。
指定輸出浮點數的有效位數(非定點方式輸出時)
指定輸出浮點數的小數點後的有效位數(定點方式輸出時)
定點方式:小數點必須出現在個位數後面(非定點方式一般指科學計數法)
設置定點輸出的方式cout<<setiosflags(ios::fixed)<<setprecision(6)<<x<<endl;
setiosflags(ios::fixed)表示以小數點位置固定的方式輸出,或者使用fixed運算元。
resetiosflags(ios::fixed)表示取消以小數點位置固定的方式輸出。

設置域寬的流操縱運算元

設置域寬(setw,width)
setw為運算元,width是成員函數

int w=4;
char string[10];
cin.width(w);
cin>>string;
cout<<setw(5)<<endl;  

輸入:1234
輸出:  123
註意:cin在讀入字元串的時候會預留一個地方給'\0',所以實際只讀了三個字元。
寬度設置有效性是一次性的,在每次讀入和輸出之前都要設置寬度。

其他運算元

showpos非負數要顯示正號。
noshowpos非負數不顯示正號。
fixed表示以定點方式輸出。
scientific表示以科學計數法輸出。
setfill(ch)表示寬度不足時以ch字元填充空白。
left表示如果寬度不夠左對齊。
right表示右對齊。
internal表示寬度不足時,符號和數值分列左右,中間填充字元填充

用戶自定義流操縱運算元

ostream&tab(ostream &output){
    return output<<'\t';
}
cout<<"aa"<<tab<<"bb"<<endl;

輸出:aa    bb
之所以允許用戶這樣自定義流操縱運算元,是因為iostream里對<<進行了重載(成員函數)

ostream &operator
<<(ostream &(*p)(ostream &));

該函數內部會調用p所指向的函數,且以*this作為參數hex、dec、oct都是函數。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、New->Project 2、點擊next 3、在Group欄輸入組織名,Artifact就是項目名。其它選擇預設就好,直接Next 4、添加依賴 5、修改您希望放項目的位置,點擊finish,等待idea下載springboot項目模板和相關的依賴 項目構建完成後的目錄結構 6、如果需要用my ...
  • 眾所周知,我們可以通過索引值(或稱下標)來查找序列類型(如字元串、列表、元組...)中的單個元素,那麼,如果要獲取一個索引區間的元素該怎麼辦呢? 切片(slice)就是一種截取索引片段的技術,藉助切片技術,我們可以十分靈活地處理序列類型的對象。通常來說,切片的作用就是截取序列對象,然而,它還有一些使 ...
  • (1)、首先在app\Http\routes.php中定義路由; 1 2 3 Route::get('view','ViewController@view'); Route::get('article','ViewController@article'); Route::get('layout',' ...
  • 一、初識 瞭解TCP協議瞭解C/S結構程式設計Python socket模塊的使用Python subprocess模塊的使用 二、理論基礎 以下內容整理自百度百科,參考鏈接: TCP(傳輸控制協議)2.1 C/S結構程式設計 C/S 結構,即大家熟知的客戶機和伺服器結構。它是軟體系統體繫結構,通過 ...
  • 打算在過年前每天總結一個知識點,所以把自己總結的知識點分享出來,中間參考了網路上很多大神的總結,但是發佈時候因為時間太久可能沒有找到原文鏈接,如果侵權請聯繫我刪除 20191030:閉包 首先一個函數,如果函數名後緊跟一對括弧,相當於現在我就要調用這個函數,如果不跟括弧,相當於只是一個函數的名字,里 ...
  • 學java時和同學碰到的一道題: 轉自https://blog.csdn.net/qq_40857349/article/details/102809100 某公司組織年會,會議入場時有兩個入口,在入場時每位員工都能獲取一張雙色球彩票,假設公司有100個員工,利用多線程模擬年會入場過程, 並分別統計 ...
  • 在很多時候,我們需要前臺和後臺進行不同的登錄操作,以限制用戶許可權,現在用 Laravel 實現這個需求。 前戲 一、獲取 Laravel 這個在文檔中都有說明的,也比較簡單,可以使用 composer 下載(我下載的時候是有些慢),我就複製之前下載好的空項目。 二、修改配置文件 在這一步我只修改了 ...
  • Java String str = "abcdefg"; String result = str.substring(str.indexOf(" ")+1, str.lastIndexOf("得到結果為: 192 取最後逗號後面的部分: SELECT SUBSTRING_INDEX(‘192;168 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...