当前位置: 首页 > news >正文

从0开始学习C++:C/C++ 输入输出全攻略

在 C/C++ 的世界里,输入输出(I/O)是程序与世界的第一次对话。无论你是刚接触编程的新手,还是备战算法竞赛的选手,熟练掌握scanf/printfcin/cout,不仅能避免“样例能过,提交 WA”的尴尬,还能在关键时刻提升运行效率。本文将带你系统掌握 C/C++ 输入输出的核心技能。

1. C 语言基础 I/O:getchar 与 putchar

虽然常被忽略,但getchar()putchar()是理解“字符流”的绝佳入口。

1.1getchar():读取一个字符
  • 函数原型int getchar(void);
  • 头文件<cstdio>
  • 返回值:成功时返回读取字符的 ASCII 值(注意:是int类型!),失败或遇到文件结束符(EOF)时返回-1

代码语言:javascript

AI代码解释

#include <cstdio> #include <iostream> using namespace std; int main() { int ch = getchar(); // 读取一个字符(包括空格、回车) cout << "ASCII: " << ch << endl; cout << "字符: " << (char)ch << endl; return 0; }

来看运行效果

💡为什么返回int而不是char因为EOF通常是-1,而char类型可能无法表示负数(取决于编译器是否默认signed char)。用int可安全区分有效字符与 EOF。

1.2 putchar():输出一个字符

函数原型int putchar(int character);返回值:成功返回输出字符,失败返回EOF

代码语言:javascript

AI代码解释

#include <cstdio> int main() { int ch = getchar(); char ch1 = 'C'; char ch2 = 'B'; char ch3 = 'A'; putchar(ch1); // 输出该字符 putchar(ch2); putchar(ch); putchar('\n'); // 换行 putchar(ch3); return 0; }

运行效果:

📌应用场景: 在算法竞赛中,getchar/putchar常用于快速 I/O 优化(尤其处理大量字符时),因其比cin/cout更轻量。

2. C 语言主力 I/O:scanfprintf

这组函数在竞赛中使用频率极高,尤其在格式控制方面无可替代。

2.1printf:格式化输出的艺术
基本规则:

printf() 的作⽤是将参数⽂本输出到屏幕。 它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。

printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换 ⾏。 为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符 \n 。

占位符

printf() 可以在输出⽂本中指定占位符。 所谓 “占位符”,就是这个位置可以⽤其他值代⼊

代码语言:javascript

AI代码解释

#include <cstdio> // 输出 There are 3 apples int main() { printf("There are %d apples\n", 3); return 0; }

上⾯⽰例中, There are %d apples\n 是输出⽂本,⾥⾯的 %d 就是占位符,表⽰这个位置要 ⽤其他值来替换。占位符的第⼀个字符⼀律为百分号 % ,第⼆个字符表⽰占位符的类型, %d 表⽰这 ⾥代⼊的值必须是⼀个整数。 printf() 的第⼆个参数就是替换占位符的值,上⾯的例⼦是整数 3 替换 %d 。执⾏后的输出结果 就是 There are 3 apples

占位符

含义

%d

int 整数

%lld

long long

%f

float / double

%c

字符

%s

C风格字符串(char[ ])

%lf

double (仅用于scanf)

%%

输出一个 %

格式化技巧

代码语言:javascript

AI代码解释

#include <cstdio> int main() { // 1. 限定最小宽度(右对齐) printf("%5d\n", 123); // 输出:" 123" // 2. 左对齐 printf("%-5d\n", 123); // 输出:"123 " // 3. 控制小数位数 printf("%.2f\n", 3.14159); // 输出:"3.14" // 4. 宽度 + 小数位数 printf("%8.2f\n", 3.14); // 输出:" 3.14" // 5. 输出百分号 printf("正确率:%.1f%%\n", 95.5); // 输出:"正确率:95.5%" return 0; }

2.2scanf:精准读取用户输入

scanf() 函数⽤于读取⽤⼾的键盘输⼊。

程序运⾏到 scanf() 这个语句时,会停下来,等待⽤⼾从键盘输⼊。

⽤⼾输⼊数据、按下回⻋键后, scanf() 就会处理⽤⼾的输⼊,将其存⼊变量。 scanf() 的语法跟 printf() 类似。

代码语言:javascript

AI代码解释

#include <cstdio> int main() { int i = 0; scanf("%d", &i); printf("%d\n", i); return 0; }

这个时候我们运行:

会报错,这是为什么呢?

在 Visual Studio(特别是 VS2015 及以后版本) 中,默认启用了微软的安全增强机制。它认为像 scanf 、 gets 、 strcpy 这些“老派”C 标准库函数 存在安全隐患

http://www.jsqmd.com/news/454470/

相关文章:

  • SpringMVC的工作流程
  • 国内信创实时云渲染服务商怎么选?靠谱标准看这几点
  • C++ 手写实现 unordered_map 和 unordered_set:深入解析与源码实战
  • 【Linux系统】进程状态 | 进程优先级
  • 中小企业布局信创实时云渲染,可行吗?
  • C++ 定长内存池,让内存分配快到飞起!
  • 信创实时云渲染与传统本地渲染,企业选型该瞄准哪些核心点?
  • 【毕业设计】SpringBoot+Vue+MySQL 医院信管系统平台源码+数据库+论文+部署文档
  • SpringBoot+Vue 智能菜谱推荐系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • C++ 异常处理机制详解:从基础语法到工程实践
  • 2026年江苏变压器铜铝排/变压器铜电磁线/变压器铝电磁线服务商采购白皮书:高压输配电领域的核心供应商竞争力解析 - 2026年企业推荐榜
  • Flutter 三方库 ntp_dart 的鸿蒙化适配指南 - 获取绝对可信的授时服务、助力鸿蒙端金融与考勤类应用杜绝本地时钟作弊风险
  • 【Linux系统】理解硬件 | 引入文件系统
  • 《Linux 输入输出重定向与 VI 编辑器:全面操作指南与原理剖析》
  • Spring推出Spring AI框架,看看怎么个事
  • 2026年无纸化会议系统推荐指南:会议音响套装/吸顶会议音箱/国产无纸化会议/多媒体室音响/大礼堂音响/选择指南 - 优质品牌商家
  • 【Linux系统】进程地址空间
  • Linux网络编程:应用层自定义协议与序列化
  • 2026年外贸建站公司实力大盘点:口碑、技术、信用TOP级企业全解析 - 品牌推荐大师1
  • 年度总结:我的技术成长与反思
  • 【Linux系统】命令行参数和环境变量
  • 核“芯”动力,重构无人机通信边界——LR1121IMLTRT 多频段LoRa收发器
  • Java项目中策略模式的使用方法:从零开始掌握可扩展业务逻辑设计
  • 互联网大厂Java小白面试:从基础到进阶的技术问答细节
  • 2026年快速温变试验箱优质供应商盘点:哪家能耗更低? - 品牌推荐大师
  • 2026年波纹金属软管厂商评价排行,目前评价好的波纹金属软管厂商选哪家,波纹补偿器/阀用波纹管,波纹金属软管品牌推荐 - 品牌推荐师
  • 零碳园区商业模式创新的政策支持对企业有哪些影响?
  • Linux服务器崩溃急救指南:实战演练常见故障排查
  • 互联网大厂Java面试:Spring Boot微服务与Redis缓存应用场景分析
  • Flutter 三方库 clean_feature_gen 的鸿蒙化适配指南 - 掌握整洁架构自动化生成技术、助力大中型项目构建高内聚、低耦合且极速迭代的功能模块体系