考纲要求
- 掌握 cout 的基本用法:用连续的小于号把多个内容串起来输出,语句以分号结束。
- 掌握 cin 的基本用法:用连续的大于号把多个变量的值一次读入,多个数据之间用空白分隔。
- 理解 endl 与字符换行符的作用都是换行,endl 还会刷新输出缓冲区。
- 知道 cin 读入数值或字符串时会跳过前面的空格与换行,读入单个字符时同样会跳过空白。
典型题型
- 读入两个整数并输出它们的和、差、积。
- 读入一个字符,输出它的 ASCII 码。
- 按指定格式输出多行内容,考查换行位置与连续输出。
常见错误
- 把 cin 和 cout 的方向搞反,写成 cin << x 或 cout >> x,编译无法通过。
- 想输出 1 加 2 的结果却写成 cout << "1+2",双引号里是原样输出的文字,不会计算。
- 输出多个内容时漏写小于号,例如写成 cout << a b;或漏写分号。
- 以为输入能自动按行分配,实际上 cin 只按数据本身读取,多个数据之间用空格或换行分隔都可以。
- 需要读入带空格的整行文字时仍用 cin >>,结果只读到第一个空白前的内容。
深入理解
cin 是按空白切开的
cin >> a >> b; 会跳过前导空白(空格、制表符、换行),读到一个完整的数据后停下。所以输入 3 5 和输入 3 换行 5,对程序来说完全一样——读数字时不需要关心数据之间隔了几个空格或几行。
但读字符串时这条规则会带来坑:cin >> s 遇到空格就停,输入 hello world 只能读到 hello。一级题目通常读的是单个单词或数字,遇到含空格的整行,需要用 getline。
cout 的输出格式
cout << a << " " << b << endl; 把多个内容依次接到屏幕上,内容之间不加任何分隔符,所以要自己补空格。题目要求输出「两个数用空格隔开」,就必须显式写 " "。很多答案被判错,只是因为少了一个空格或最后多了一个空格。
endl 的作用是换行并刷新缓冲区,'\n' 只换行。做题时两者结果一样,循环里输出大量数据时用 '\n' 更快。注意 '\n' 才是转义换行,写成 "endl"(带引号)会原样打印出这四个字母,两者不能混用。
一个完整的模板
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}#include <iostream> 提供输入输出设施,using namespace std; 让 cin、cout 不用写前缀,int main() 是入口,最后的 return 0; 表示程序正常结束。缺其中任何一样都可能编译不过,这是初学阶段最高频的编译错误来源。
自编例题
读入半径求圆的周长
读入一个实数半径,输出圆的周长,保留两位小数。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double r;
cin >> r;
double c = 2 * 3.14159 * r;
cout << fixed << setprecision(2) << c << endl;
return 0;
}半径可能是小数,所以声明为 double,用 cin 读入后直接参与运算。fixed 与 setprecision(2) 一起使用,表示以定点形式输出并保留两位小数,需要包含 iomanip 头文件。若去掉这两项,输出会按默认精度显示,可能得到很长的小数或科学计数法。这类「读入实数、按格式输出」的题目在一级中很常见,关键是类型选对、格式设置写全。
相关真题
这块内容在整条路线里的位置:GESP C++ 1 级备考路径。
READY TO START
开始练习
先做一套本级别测评,报告会指出哪些知识点需要重点补;再回到本页对照考纲要求逐条核对,把不确定的条目记下来集中练。
常见问题
endl 和换行符有什么区别?
两者都能换行。endl 在换行之后还会刷新输出缓冲区,保证内容立即写出;换行符只负责换行。日常练习两者都可以用。
cin 能一次读入多个数据吗?
可以。cin >> a >> b 会依次读入两个数据,多个数据之间用空格或换行分隔都行,cin 会自动跳过这些空白字符。
为什么读入的字符把空格也读进去了?
cin >> 默认会跳过空白字符,包括空格、制表符和换行,所以读到的是第一个非空白字符。若确实需要读入包含空格的整行,需要换用整行读取的方式。
