C++输入输出cout和cin使用方法介绍

引言

C语言中输入输出大多时候使用的是printf和scanf两个函数,C++在C语言的基础上新增了cout和cin来进行输入输出操作,cout从某种角度来说是printf的升级版,因此在C++中cout可以代替printf但是printf不能代替cout,cin同样可以代替scanf,printf和scanf在C++中同样兼容,大家可以酌情使用

使用方法介绍

cout

cout相较于printf输出简单数据类型时更简单易读

以下是基础数据类型的输出用法示例

 #include <iostream>
 #include <string>
 ​
 using namespace std;
 int main()
 {
     double Pi = 3.1415926;
     int num = 5;
     char str = 'A';
 ​
     cout << "hello world" << endl;
     cout << "num = " << num << endl;
     cout << "Pi = " << Pi << endl;
     cout << "str = " << str << endl;
     return 0;
 }

其他基础数据类型的输出格式与上述代码中的输出格式差不多,在使用cout输出简单数据类型时能够明显感觉到它要比printf无脑的多,主要原因时它不需要考虑数据类型的问题,cout可以自动识别。当然cout也支持输出特定格式的数据,例如经典的保留小数点后多少位有效数字,cout也可以实现cout << setprecision(4) << "Pi = " << Pi << endl;这里演示的就是保留小数点后4位的操作,在使用setprecision时需要引入<iomanip>头文件。包括其他的像输出变量地址以及左右对齐操作也都有对应的方法,但是作为从C语言进阶到C++的初学者建议大家在面临复杂类型的数据输出时使用格式化输出printf,毕竟使用自己熟悉的操作犯错的概率也会小很多,cout可以代替printf但不代表printf就一无是处。

endl的作用

endl往往是跟在cout输出完数据之后的,想要解释endl的作用就离不开缓冲区的概念,在C语言中我们熟知的printf是行缓冲的正常情况下只有在缓冲区满了的情况下才会输出。正常情况下想要让打印内容正常输出要么手动刷新缓冲区要么在输出内容末尾添加换行符,否则在未填满缓冲区前打印内容就无法正常输出,下面的代码就是一个例子。

 #include <stdio.h>
 ​
 int main()
 {
     printf("hello");
     printf("hello");
     printf("world");
 ​
     while(1)
     ;
     return 0;
 }

使用windows系统的用户发现内容好像也正常输出了,这是因为Windows系统下的许多软件针对这个问题做了优化,在print语句结束后自动刷新缓冲区,但是在linux系统下就无法正常输出,以下是Ubuntu22.04下vscode的输出示例

在程序结束前一般会自动刷新缓冲区,但是代码中while(1)让代码卡在了结束前,printf缓冲区未满之前相应内容就无法输出。因此在Linux系统下编写程序时就需要添加换行符,同样cout也是行缓冲输出的。

在C++中手动刷新缓冲区的方法也很简单,直接在本来endl的位置将它替换为flush即可。

前面说了这么多现在可以着手分析endl的作用了,在vscode中按住ctrl按键,再用鼠标点击endl即可跳转到endl的实现函数中

注释内容翻译过来大概意思就是这个

 /**
  * 写入换行符并刷新流。
  *
  * 该操纵器常被误用于仅需简单换行符的场景,会导致缓冲区性能低下。关于此问题的详细讨论,
  * 请参阅:https://gcc.gnu.org/onlinedocs/libstdc++/manual/streambufs.html#io.streambuf.buffering
  */

这样一看就明了了,endl的作用无非就是刷新缓冲区再加上换行符。

但是,在输出提示信息时endl的使用频率是比较低的,endl会触发缓冲区刷新,在频繁输出时可能影响性能,此时可以替换为'\n';但是在普通场景下,endl的可读性更好,无需过度纠结,大家就怎么舒服怎么来吧。

cin

cin的作用就是从输入流获取数据,简单用法如下

 #include <iostream>
 ​
 using namespace std;
 int main()
 {
     int num;
     cin >> num;
     cout << "num = " << num << endl;
 ​
     char str[100];
     cin >> str;
     cout << "str = " << str << endl;
 }

此程序的缺陷是读取str时遇到空格便会停止,因此可以使用cin.getline()这种读取方法,只有在遇到换行符时才会停止。

char str[100];
cin.getline(str, 100);  //最多读取99个字符(包含'\0'),遇到'\n'停止

在此只介绍了cin的简单用法,大家如想深入了解可以自行探索。

总结

输入输出在C++中属于较为简单的内容,自己敲一敲实例就能掌握,可能需要注意的就是cout使用<<(插入运算符),cin使用>>(提取运算符),方向与数据流向一致(如cout <<  x表示将x插入输出流)。

如有不合理的地方还望诸位不吝赐教

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐