C/C++输入输出初级(二) (算法竞赛)

🌊用有趣的言语来阐述苦涩难懂的代码世界,让每一个技术都充满风趣!
🔭个人主页:散峰而望
🚀学习方向: C/C++等方向
📌专栏系列:
- 📖《C语言:从基础到进阶》
- 📚《编程工具的下载和使用》
- 🚀《C语言刷题》
- ⚖️《算法竞赛从入门到获奖》
💬人生格言:冀以尘雾之微,补益山海,荧烛末光,增辉岁月。
🎬博主简介



文章目录
- 前言
- 3. cin和cout
- 3.1 基本用法
- 3.2 连续输入输出
- 3.3 cout的格式输出(选学)
- 3.3.1 控制宽度和填充
- 3.3.2 控制数值格式
- 3.3.3 控制整数格式
- 3.3.4 控制对齐方式
- 3.4 练习
- 结语
前言
前面的文章中我们已经对getchar与putchar和scanf与printf函数有所了解,我们还剩下cin与cout没讲,于是这一篇将对cin与cout详细的讲解。
3. cin和cout
前面我们已经在C++入门中提到了:cin和cout两个流对象。接下来让我们进一步了解一下吧。
cin是C++中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用cin来进行数据的提取,cin一般是和>>(流提取运算符)配合使用的。cin的功能和scanf是类似的。
cout是C++中提供的标准输出流对象,一般针对的控制台的窗口,也就是将数据以字符流的形式输出到控制台窗口上显示。cout一般是和<<(流插入运算符)配合使用。cout的功能和printf是类似的。
写程序的时候,经常需要处理数据,不管什么类型的数据都是以字符流的形式输入和输出的,也就是不管在键盘上输入什么类型的数据,还是将程序中的各种类型的数据输出显示到控制台屏幕上,都是以字符流的形式处理的。
cin和cout 的输入输出非常的方便,不需要手动控制格式,能够自动识别变量类型。
3.1 基本用法
演示代码:
#include <iostream>
using namespace std;
int main()
{int a;char c;float f;cin >> a; // 读取一个整数 cin >> c; // 读取一个字符 cin >> f; // 读取取一个浮点数 cout << "打印结果:"<<endl;cout << a << endl;cout << c << endl;cout << f << endl;return 0;
}

当我们在键盘输入数据的时候,输入的数据不能被cin解读为对应类型的数据,那么读取也就结束了。
比如:

cin使用细节:
cin在读取的时候是根据用戶的输入,从前往后,从上往下依次扫描。
cin在读取的过程中遇到空格,自动会跳过,所以不要担心在想要的字符前输入空白字符。
当一行读取结束的时候,会自动换行,读取下一行的内容。
cin后面不可以跟换行endl。
3.2 连续输入输出
如果我们一次要输入/输出多个数据,那cin和cout能做到吗?可以!
在上面的代码中,使用cout进行变量的输出,实质上是将变量插入到cout对象里,并以cout对象作为返回值返回,因此我们还可以用<< 在后面连续输出多个内容,通过连续输入输出的方式对代码进行编写,效果如下:
cin举例:
#include <iostream>
using namespace std;
int main()
{int a = 0;int b = 0;//同类型变量连续输入 cin >> a >> b; //以最后一次
输入为准 //添加换行endl cin >> a >> endl; //代码编译报错 return 0;
}
#include <iostream>
using namespace std; int main()
{ //不同类型变量的连续输入 int a = 0; char ch = 0; float f = 0; cin >> a >> ch >> f; return 0;
}
cout举例:
#include <iostream>
using namespace std;
int main()
{//对同一类型变量连续输出 int a = 10;int b = 20cout << a << " " << b <<
endl;return 0;
}
#include <iostream>
using namespace std; int main()
{ //支持相同/不同类型变量的连续输入 char ch = 0; float f = 0.1; cout << ch << f << endl; //格式化输出:添加(任意)空格和字符串 cout << "ch:" << ch << " f:" << f << endl; //格式化输出:多次换行 cout << ch << endl << endl; return 0;
}
cin的好处:
当输入若干个变量(也就是数据量很少)的时候,我们就可以通过>>把所有的数据用一行代码完成接收,而且无需关心数据的类型,和scanf函数比起来代码的书写非常简洁明了。
cout的好处:
cout也可以用来连续输出多个数值,而且无需考虑数值的类型,因为它本身会做类型处理,和printf比起来比较方便。
3.3 cout的格式输出(选学)
这一部分使用起来比较麻烦,可以选择性学习。
printf函数在输出数据的时候,可以指定格式来输出,比如:指定宽度,比如指定小数点后的位数,对齐方式等等。那么cout在数据的时候能否指定格式呢?答案是可以的!cout 结合< iomanip > (IO manipulators)头文件中的操纵符,可以灵活控制输出格式,从而满足各种格式化需求。
3.3.1 控制宽度和填充
- setw:设置字段宽度(只对紧接着的输出项有效)
- setfill:设置填充字符
#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;
}
结果演示:

3.3.2 控制数值格式
- fixed:以固定小数点表示浮点数,设置后就不会以科学计数法展示了。
- scientific:以科学计数法表示浮点数。
- setprecision:设置浮点数的精度,以控制小数点后的数字位数,一般先固定小数点,再设置精度。
代码如下:
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{double pi = 3.141592653589793;cout << "默认: " << pi << endl;cout << "固定小时点方式: " << fixed << pi << endl;cout << "科学计数法方式: " << scientific << pi << endl;cout << "固定小数点,小数点后2位有效数字: " << setprecision(2) << pi << endl;cout << "固定小数点,小数点后2位有效数字: " << fixed << setprecision(2) << pi << endl;return 0;
}
演示效果:


如果改一下数据就可以看到其中的不同:
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{double pi = 31.41592653589793;cout << "默认: " << pi << endl;cout << "固定小时点方式: " << fixed << pi << endl;cout << "科学计数法方式: " << scientific << pi << endl;cout << "固定小数点,小数点后2位有效数字: " << setprecision(2) << pi << endl;cout << "固定小数点,小数点后2位有效数字: " << fixed << setprecision(2) << pi << endl;return 0;
}
演示效果:

cout结合其他操作符还能完成一些其他的格式输出,但是毕竟cout在完成格式化输出的时候,其实不如printf方便,所以在竞赛中,涉及格式化输出的时候,我们一般会使用printf来完成,所以这一部分的内容属于选学部分。
3.3.3 控制整数格式
- dec:以十进制格式显示整数(默认)
- hex:以十六进制格式显示整数
- oct:以八进制格式显示整数
代码如下:
#include <iostream>
using namespace std;
#include <iomanip>
int main() {int n = 255;cout << "十进制 : " << dec << n << endl;cout << "十六进制: " << hex << n << endl;cout << "八进制 : " << oct << n << endl;return 0;
}

3.3.4 控制对齐方式
- left:左对齐
- right:右对齐(默认)
代码如下:
#include <iostream>
using namespace std;
#include <iomanip>
int main() {int n = 123;cout << "右对齐: " << setw(10) << n << endl;cout << "右对齐: " << setw(10) << right << n << endl;cout << "左对齐: " << setw(10) << left << n << endl;return 0;
}
演示结果:

3.4 练习
数字反转
三角形面积
结语
希望这边文章能让各位更好的了解cin与cout函数,下一篇我们将深入探讨循环的世界。
同时愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天。


