C++ 中的 iostream 庫:cin/cout 基本用法

iostream 是 C++ 標準庫中用于輸入輸出操作的核心庫,它基于面向對象的設計,提供了比 C 語言的 stdio.h 更強大、更安全的 I/O 功能。下面詳細介紹 iostream 庫中最常用的輸入輸出工具:cincout

一、 基本概念

  • iostream:包含在 <iostream> 頭文件中,提供標準輸入輸出流。
  • 標準流對象
    • cin:標準輸入流(通常對應鍵盤)。
    • cout:標準輸出流(通常對應控制臺)。
    • cerr:標準錯誤流(無緩沖,直接輸出)。
    • clog:標準日志流(有緩沖)。

二、 cout 的基本用法

輸出基本數據類型
#include <iostream>int main() {int num = 42;double pi = 3.14159;char letter = 'A';std::string name = "Alice";  // 需要包含 <string> 頭文件// 輸出變量std::cout << "整數: " << num << std::endl;std::cout << "浮點數: " << pi << std::endl;std::cout << "字符: " << letter << std::endl;std::cout << "字符串: " << name << std::endl;// 輸出表達式std::cout << "1 + 2 = " << (1 + 2) << std::endl;return 0;
}

輸出結果

整數: 42
浮點數: 3.14159
字符: A
字符串: Alice
1 + 2 = 3
格式化輸出

使用 std::endl'\n' 換行:

std::cout << "第一行" << std::endl;
std::cout << "第二行\n";  // '\n' 更高效,不強制刷新緩沖區

使用 std::setw()std::setfill() 控制寬度和填充字符(需包含 <iomanip>):

#include <iomanip>std::cout << std::setw(10) << std::setfill('*') << "Hello" << std::endl;
// 輸出:*****Hello

三、 cin 的基本用法

輸入基本數據類型
#include <iostream>int main() {int age;double salary;std::string name;std::cout << "請輸入姓名: ";std::cin >> name;  // 讀取一個單詞(空格分隔)std::cout << "請輸入年齡: ";std::cin >> age;std::cout << "請輸入薪水: ";std::cin >> salary;std::cout << "姓名: " << name << ", 年齡: " << age << ", 薪水: " << salary << std::endl;return 0;
}

輸入示例

請輸入姓名: Alice
請輸入年齡: 25
請輸入薪水: 5000.5
姓名: Alice, 年齡: 25, 薪水: 5000.5
輸入多行字符串

cin >> 遇到空格會停止讀取,若要讀取整行,使用 std::getline()

#include <iostream>
#include <string>int main() {std::string fullName;std::cout << "請輸入全名: ";std::getline(std::cin, fullName);  // 讀取整行(包括空格)std::cout << "你好, " << fullName << std::endl;return 0;
}

四、 輸入輸出重定向

可以將 cincout 重定向到文件:

#include <iostream>
#include <fstream>int main() {// 輸出重定向到文件std::ofstream outFile("output.txt");std::streambuf* coutBuf = std::cout.rdbuf();std::cout.rdbuf(outFile.rdbuf());std::cout << "這句話會寫入文件" << std::endl;// 恢復標準輸出std::cout.rdbuf(coutBuf);std::cout << "這句話會顯示在控制臺" << std::endl;return 0;
}

五、 常見問題與解決方案

1. cin 緩沖區殘留問題

若先使用 cin >> 讀取數值,再用 getline() 讀取字符串,可能導致 getline() 讀取到殘留的換行符。
解決方案

int num;
std::string line;std::cin >> num;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');  // 清除緩沖區
std::getline(std::cin, line);  // 正常讀取
2. 輸入驗證

檢查輸入是否合法:

int num;
std::cout << "請輸入整數: ";
if (!(std::cin >> num)) {std::cout << "輸入無效,請輸入整數!" << std::endl;std::cin.clear();  // 清除錯誤標志std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');  // 清除緩沖區
}

六、 進階用法

格式化輸出(精度控制)
#include <iomanip>double pi = 3.14159265358979;
std::cout << std::fixed << std::setprecision(4) << pi << std::endl;  // 輸出 3.1416
自定義類型的 I/O

重載 <<>> 運算符:

class Point {
private:int x, y;
public:// 重載 << 運算符friend std::ostream& operator<<(std::ostream& os, const Point& p) {os << "(" << p.x << ", " << p.y << ")";return os;}// 重載 >> 運算符friend std::istream& operator>>(std::istream& is, Point& p) {is >> p.x >> p.y;return is;}
};// 使用示例
Point p;
std::cin >> p;  // 輸入: 3 4
std::cout << p;  // 輸出: (3, 4)

七、總結

  • cout:用 << 輸出數據,支持鏈式調用(如 cout << a << b)。
  • cin:用 >> 讀取數據,默認以空格分隔,可用 getline() 讀取整行。
  • 格式化:通過 <iomanip> 控制輸出寬度、精度、填充字符等。
  • 注意事項:處理輸入緩沖區殘留、輸入驗證和自定義類型的 I/O 重載。

通過這些基本操作,可以實現大多數控制臺程序的輸入輸出功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87075.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87075.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87075.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SAP復制一個自定義移動類型

SAP復制移動類型 在SAP系統中&#xff0c;復制移動類型201可以通過事務碼OMJJ或SPRO路徑完成&#xff0c;用于創建自定義的移動類型以滿足特定業務需求。 示例操作步驟 進入OMJJ事務碼&#xff1a; 打開事務碼OMJJ&#xff0c;選擇“移動類型”選項。 復制移動類型&#xff…

Bambu Studio 中的“回抽“與“裝填回抽“的區別

回抽 裝填回抽: Bambu Studio 中的“回抽” (Retraction) 和“裝填回抽”(Prime/Retract) 是兩個不同的概念&#xff0c;它們都與材料擠出機的操作過程相關&#xff0c;但作用和觸發條件有所不同。 回抽(Retraction): 回抽的作用, 在打印機移動到另一個位置之前&#xff0c;將…

危化品安全監測數據分析挖掘范式:從被動響應到戰略引擎的升維之路

在危化品生產的復雜生態系統中,安全不僅僅是合規性要求,更是企業生存和發展的生命線。傳統危化品安全生產風險監測預警系統雖然提供了基礎保障,但其“事后響應”和“單點預警”的局限性日益凸顯。我們正處在一個由大數據、人工智能、數字孿生和物聯網技術驅動的范式變革前沿…

C++ RPC 遠程過程調用詳細解析

一、RPC 基本原理 RPC (Remote Procedure Call) 是一種允許程序調用另一臺計算機上子程序的協議,而不需要程序員顯式編碼這個遠程交互細節。其核心思想是使遠程調用看起來像本地調用一樣。 RPC 工作流程 客戶端調用:客戶端調用本地存根(stub)方法參數序列化:客戶端存根將參…

Python:操作 Excel 預設色

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Python 操作 Excel 系列 讀取單元格數據按行寫入設置行高和列寬自動調整行高和列寬水平…

中科院1區|IF10+:加大醫學系團隊利用GPT-4+電子病歷分析,革新肝硬化并發癥隊列識別

中科院1區|IF10&#xff1a;加大醫學系團隊利用GPT-4電子病歷分析&#xff0c;革新肝硬化并發癥隊列識別 在當下的科研領域&#xff0c;人工智能尤其是大語言模型的迅猛發展&#xff0c;正為各個學科帶來前所未有的機遇與變革。在醫學范疇&#xff0c;從疾病的早期精準篩查&am…

Python學習小結

bg&#xff1a;記錄一下&#xff0c;怕忘了&#xff1b;先寫一點&#xff0c;后面再補充。 1、沒有方法重載 2、字段都是公共字段 3、都是類似C#中頂級語句的寫法 4、對類的定義直接&#xff1a; class Student: 創建對象不需要new關鍵字&#xff0c;直接stu Student() 5、方…

QCustomPlot 中實現拖動區域放大?與恢復

1、拖動區域放大? 在 QCustomPlot 中實現 ?拖動區域放大?&#xff08;即通過鼠標左鍵拖動繪制矩形框選區域進行放大&#xff09;的核心方法是設置 SelectionRectMode。具體操作步驟&#xff1a; 1?&#xff09;禁用拖動模式? 確保先關閉默認的圖表拖動功能&#xff08;否…

如何將文件從 iPhone 傳輸到閃存驅動器

您想將文件從 iPhone 或 iPad 傳輸到閃存盤進行備份嗎&#xff1f;這是一個很好的決定&#xff0c;但您需要先了解一些實用的方法。雖然 Apple 生態系統在很大程度上是封閉的&#xff0c;但您可以使用一些實用工具將文件從 iPhone 或 iPad 傳輸到閃存盤。下文提供了這些行之有效…

互聯網大廠Java求職面試:云原生架構與微服務設計中的復雜挑戰

互聯網大廠Java求職面試&#xff1a;云原生架構與微服務設計中的復雜挑戰 面試官開場白 面試官&#xff08;嚴肅模式開啟&#xff09;&#xff1a;鄭薪苦&#xff0c;歡迎來到我們的技術面試環節。我是本次面試的技術總監&#xff0c;接下來我們將圍繞云原生架構、微服務設計、…

leetcode-hot-100 (鏈表)

1. 相交鏈表 題目鏈接&#xff1a;相交鏈表 題目描述&#xff1a;給你兩個單鏈表的頭節點 headA 和 headB &#xff0c;請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表不存在相交節點&#xff0c;返回 null 。 解答&#xff1a; 其實這道題目我一開始沒太看懂題目給…

Web前端基礎之HTML

一、瀏覽器 火狐瀏覽器、谷歌瀏覽器(推薦)、IE瀏覽器 推薦谷歌瀏覽器原因&#xff1a; 1、簡潔大方,打開速度快 2、開發者調試工具&#xff08;右鍵空白處->檢查&#xff0c;打開調試模式&#xff09; 二、開發工具 核心IDE工具 Visual Studio Code (VS Code)? 微軟開發…

11.TCP三次握手

TCP連接建立與傳輸 1&#xff0e;主機 A 與主機 B 使用 TCP 傳輸數據&#xff0c;A 是 TCP 客戶&#xff0c;B 是 TCP 服務器。假設有512B 的數據要傳輸給 B&#xff0c;B 僅給 A 發送確認&#xff1b;A 的發送窗口 swnd 的尺寸為 100B&#xff0c;而 TCP 數據報文段每次也攜帶…

Python 爬蟲入門 Day 3 - 實現爬蟲多頁抓取與翻頁邏輯

Python 第二階段 - 爬蟲入門 &#x1f3af; 今日目標 掌握網頁分頁的原理和定位“下一頁”的鏈接能編寫循環邏輯自動翻頁抓取內容將多頁抓取整合到爬蟲系統中 &#x1f4d8; 學習內容詳解 &#x1f501; 網頁分頁邏輯介紹 以 quotes.toscrape.com 為例&#xff1a; 首頁鏈…

分布式定時任務系列12:XXL-job的任務觸發為什么是死循環?

傳送門 分布式定時任務系列1&#xff1a;XXL-job安裝 分布式定時任務系列2&#xff1a;XXL-job使用 分布式定時任務系列3&#xff1a;任務執行引擎設計 分布式定時任務系列4&#xff1a;任務執行引擎設計續 分布式定時任務系列5&#xff1a;XXL-job中blockingQueue的應用 …

位運算詳解之異或運算的奇妙操作

位運算詳解之異或運算的奇妙操作 一、異或運算的本質與核心性質1.1 異或運算的定義與邏輯規則1.2 異或運算的核心代數性質&#xff08;1&#xff09;自反性&#xff1a;a ^ a 0&#xff08;2&#xff09;恒等性&#xff1a;a ^ 0 a&#xff08;3&#xff09;交換律&#xff1…

Element Plus 去除下拉菜單周黑邊

問題&#xff1a; 如上圖所示&#xff0c;當鼠標移入&#xff08;hover&#xff09;和點擊時就會圍繞一圈黑色邊框&#xff0c;但通過本文的方案 100% 完美解決。 解決方案: :deep(:focus-visible) {outline: none; } 備用方案 :deep(.el-tooltip__trigger:focus-visible) …

React Native 項目實戰 —— 記賬本應用開發指南

React Native 項目實戰 —— 記賬本應用開發指南 項目概述&#xff1a;本文將指導您使用 React Native 開發一個簡單的記賬本應用&#xff0c;幫助用戶記錄收入和支出。核心內容&#xff1a;我們將分析功能模塊、設計接口、劃分組件結構、管理數據流、實現頁面跳轉&#xff0c…

從 PPO、DPO 到 GRPO:大語言模型策略優化算法解析

從 PPO、DPO 到 GRPO&#xff1a;大語言模型策略優化算法解析 背景與簡介 大語言模型&#xff08;LLM&#xff09;的訓練通常分為預訓練和后訓練兩個階段。預訓練階段&#xff0c;模型在海量文本上學習下一詞預測的能力&#xff1b;后訓練階段&#xff0c;我們希望進一步對齊…

React中使用Day.js指南

文章目錄 引言什么是Day.js&#xff1f;Day.js的核心特性 安裝和基礎配置安裝Day.js基礎導入和使用 在React中的基礎使用1. 顯示格式化日期2. 實時時鐘組件 常用插件配置1. 相對時間插件2. 高級格式化插件3. 時區處理插件 實戰案例&#xff1a;博客文章時間組件高級應用場景1. …