从0开始学习C++:C/C++ 输入输出全攻略
在 C/C++ 的世界里,输入输出(I/O)是程序与世界的第一次对话。无论你是刚接触编程的新手,还是备战算法竞赛的选手,熟练掌握 scanf/printf 和 cin/cout,不仅能避免“样例能过,提交 WA”的尴尬,还能在关键时刻提升运行效率。本文将带你系统掌握 C/C++ 输入输出的核心技能。
1. C 语言基础 I/O:getchar 与 putchar
虽然常被忽略,但 getchar() 和 putchar() 是理解“字符流”的绝佳入口。
1.1 getchar():读取一个字符
- 函数原型:
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:scanf 与 printf
这组函数在竞赛中使用频率极高,尤其在格式控制方面无可替代。
2.1 printf:格式化输出的艺术
基本规则:
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.2 scanf:精准读取用户输入
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 标准库函数 存在安全隐患
更多推荐

所有评论(0)