跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 输入输出详解(上)

C++ 输入输出涉及 getchar/putchar 字符处理、scanf/printf 格式化输入及 cin/cout 流操作。cin/cout 支持类型自动识别,语法简洁但默认效率较低,大数据量需关闭同步。cout 格式控制可通过 iomanip 操纵符实现,包括宽度设置、填充字符、数值精度、进制转换及对齐方式。掌握这些内容是算法竞赛及 C++ 开发的基础。

JavaCoder发布于 2026/3/28更新于 2026/9/1150 浏览
C++ 输入输出详解(上)

前言

C++ 提供了多种输入输出方式,本章节重点讲解常用函数及流操作。

一、getchar 和 putchar

getchar() 和 putchar() 属于 C 语言库函数,常用于字符级别的读写。

1、getchar()(读取)

功能 返回用户从键盘输入的一个字符,不带参数。程序运行至此暂停,等待输入,等同于使用 cin 或 scanf() 方法读取一个字符。

头文件

#include<cstdio>

返回值 如果读取失败,返回常量 EOF(通常为 -1),因此返回值类型应设为 int 而非 char。读取成功返回字符的 ASCII 值。

读取方式 getchar() 不会忽略开头的空白字符,总是返回当前读取的第一个字符,无论是否为空格。

注意

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int ch;
    ch = getchar();
    cout << (char)ch << endl;
    return 0;
}

输出时需以字符形式输出,因为读取成功返回字符的 ASCII 值,否则将输出该字符的 ASCII 码数值。

2、putchar()(输出)

功能及读取方式 参数为 int character。读取 ASCII 码,输出对应的字符。如果 character 本身就是字符,则直接输出。

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    char c = 'b';
    putchar(55); // 传入常量,输出'7'(ASCII 码 55)
    putchar(c);  // 传入字符变量,输出'b'
    putchar('5'); // 传入字符'5'(ASCII 码 53),输出字符'5'
    return 0;
}

头文件 同 getchar,包含 <cstdio>。

返回值 操作成功时,putchar() 返回输出的字符,否则返回常量 EOF。

3、结合

可以将这两个函数结合起来,一个读取一个输出。

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    char c;
    c = getchar();
    putchar(c);
    return 0;
}

或者循环读取,读取一个字符输出一个:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int c;
    while((c = getchar()) != EOF){
        putchar(c);
    }
    return 0;
}

二、scanf 和 printf 及占位符

用法与 C 语言一致,此处不再赘述。

三、cin 和 cout

cin 和 cout 是 C++ 的流对象,输入输出十分方便,不需要手动控制格式,能够自动识别变量类型。数据在键盘输入和屏幕显示均以字符流形式处理。

1、基础用法

cin 用作输入,cout 输出。

#include<iostream>
using namespace std;
int main(){
    int a;
    char c;
    float f;
    cin >> a;      // 读取 1 个整数
    cin >> c;      // 读取 1 个字符
    cin >> f;      // 读取 1 个浮点数
    cout << "打印结果:" << endl;
    cout << a << endl;
    cout << c << endl;
    cout << f << endl;
    return 0;
}

2、连续输入输出

可以使用 << 在后面连续输出多个内容,通过连续输入输出的方式编写代码。

#include<iostream>
using namespace std;
int main(){
    int a;
    char c;
    float f;
    cin >> a >> c >> f;
    cout << "打印结果:" << endl;
    cout << a << endl << c << endl << f << endl;
    return 0;
}

3、分析 cin 和 cout 的优势和劣势

(1)优势
  • cin 的好处:当输入若干个变量(数据量很少)时,可通过 >> 用一行代码完成接收,且无需关心数据的类型;和 scanf 函数相比,代码书写更简洁明了。
  • cout 的好处:可以用来连续输出多个数值,且无需考虑数值的类型(自身会做类型处理);和 printf 相比更方便。
(2)劣势

cin/cout 的劣势(对比 scanf/printf):

  1. 效率低:默认同步 stdio,大数据量下易超时(需手动关闭同步);
  2. 格式控制麻烦:小数位数、进制等设置比 printf 繁琐;
  3. 输入灵活性差:复杂分隔符/格式处理不如 scanf 方便;
  4. 错误处理复杂:类型不匹配时需手动清理状态。

四、cout 的格式输出

printf 可通过指定格式输出数据。cout 也能指定输出格式,结合 <iomanip>(IO manipulators)头文件中的操纵符,即可灵活控制输出格式。

1、控制宽度和填充

setw:设置字段宽度(只对紧接着的输出项有效)。默认右对齐。 setfill:设置填充字符。(紧跟着 setw)

#include<iostream>
using namespace std;
#include<iomanip>
int main(){
    int a = 123;
    cout << "默认宽度:" << a << endl;
    cout << "宽度设置为 10:" << setw(10) << a << endl;
    cout << "宽度为 10,不够时填充*:" << setw(10) << setfill('*') << a << endl;
    return 0;
}

2、控制数值格式

using namespace std;
#include<iomanip>
int main(){
    double pi = 3.141592653589793;
    cout << "默认:" << pi << endl;
    cout << "固定小数点方式:" << fixed << pi << endl;
    cout << "科学计数法方式:" << scientific << pi << endl;
    cout << "固定小数点,小数点后 2 位有效数字:" << fixed << setprecision(2) << pi << endl;
    return 0;
}

3、控制整数格式

#include<iostream>
using namespace std;
int main(){
    int num = 20;
    cout << "十进制(dec):" << dec << num << endl; // 默认,输出 20
    cout << "十六进制(hex):" << hex << num << endl; // 输出 14
    cout << "八进制(oct):" << oct << num << endl;   // 输出 24
    return 0;
}

注意 这些操纵符是'全局生效'的——一旦设置,后续所有整数输出都会沿用该进制,直到重新修改(如再次用 dec 切回十进制)。

#include<iostream>
using namespace std;
int main(){
    int num = 20;
    cout << "十进制(dec):" << dec << num << endl;
    cout << "十六进制(hex):" << hex << num << endl;
    cout << "八进制(oct):" << oct << num << endl;
    cout << "十进制(dec):" << dec << num << endl; // 恢复十进制
    cout << num << endl;
    return 0;
}

4、控制对齐方式

设置宽度时默认右对齐,可使用 left/right 进行左/右对齐。

#include<iostream>
using namespace std;
#include<iomanip>
int main(){
    int n = 123;
    cout << "右对齐:" << setw(10) << right << n << endl;
    cout << "左对齐:" << setw(10) << left << n << endl;
    return 0;
}

五、总结

本章讲解了 C++ 的输入输出方式及 cout 的格式控制。掌握这些知识有助于更好地进行算法竞赛及 C++ 开发。

目录

  1. 前言
  2. 一、getchar 和 putchar
  3. 1、getchar()(读取)
  4. 2、putchar()(输出)
  5. 3、结合
  6. 二、scanf 和 printf 及占位符
  7. 三、cin 和 cout
  8. 1、基础用法
  9. 2、连续输入输出
  10. 3、分析 cin 和 cout 的优势和劣势
  11. (1)优势
  12. (2)劣势
  13. 四、cout 的格式输出
  14. 1、控制宽度和填充
  15. 2、控制数值格式
  16. 3、控制整数格式
  17. 4、控制对齐方式
  18. 五、总结

更多推荐文章

查看全部
  • EhViewer 安卓版安装与使用全攻略:开源漫画阅读器配置指南
  • NVIDIA RTX PC 开源 AI 工具升级:LLM 与扩散模型性能优化
  • GitHub 项目上传实操指南:网页与命令行方式
  • Spring 排序机制:接口与注解的使用
  • DGX Spark 部署 vLLM + Open WebUI 运行 Qwen3-Coder-Next-FP8(CUDA 13.0 兼容版)
  • 命令行工具 MCPHost 实现大模型与外部工具交互
  • C++ 量子计算实战:多 qubit 系统编程核心技巧
  • CMake 构建 WebRTC 实战:从源码编译到性能优化
  • 鸣潮 QQ 机器人部署指南:集成早柚核心与插件功能
  • NSSCTF Web 竞赛题目解题汇总
  • Web APIs:元素滚动 scroll 系列属性详解(位置与尺寸)
  • Qwen2.5-7B-Instruct 大模型 vLLM 推理加速与前端调用
  • Windows 部署 OpenAkita 并接入飞书模块构建本地 AI 助手
  • 前端部署:从开发到生产的全流程指南
  • 高并发、分布式场景下的 ID 生成策略
  • Stable Diffusion ControlNet 基础使用指南
  • Linux 基础使用与 Java 项目部署指南
  • vLLM + Open-WebUI 部署通义千问 2.5-7B 完整教程
  • JWT 结构化知识体系:从原理到生产落地
  • 手机端本地运行 Stable Diffusion 的开源方案

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online