cin和cout
本节教你怎么用C++的方式输入输出,比如输出怎么“hello world”。当然,你也可以向你的女朋友输出“I Love you”!
流和缓存区
先别急,要想明白输入输出是怎么回事,就不得不提流和缓冲区
-
流
“流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据的抽象描述。
在计算机系统中是指信息从外部输入设备向计算机内部输入,或者从内存向外部输出设备输出的过程。这种输入输出的过程被形象的比喻为“流”。
简单点讲,流就是信息输入输出的过程。不过在计算机系统中,输入输出的数据在流动的过程要经过缓冲区。
-
缓冲区
缓冲区是内存空间的一部分,也就是说在内存空间中预留了一定大小的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
也就是说,当我使用 scanf("%d",&x) ,并输入10时,10先会被存储在缓冲区中,当我按下回车键时,10才会被scanf函数接收并传给x。
进一步理解:
char ch; // 输入abcd getchar(); while((ch=getchar())!='\n'){ putchar(ch); } // 输出bcd
第一此使用getchar()时,缓冲区无字符,等待用户输入,此时输入abcd,第一个getchar()会读取a,缓冲区中还剩下bcd。后面使用getchar时,因为缓存区中有字符,无需外界输入,getchar会直接从缓冲区中读取,直到读到换行符’\n’为止,所以依次输出b,c和d。
有趣的是’\n’是哪里来的呢?这是因为你在确认输入时会按下回车键’\r’,这个’\r’会被转化为’\n’同样存储在缓冲区中!
现在,你能理解为什么有些防止运行窗口闪退的程序一般要加上两个 getchar() 了吧。
int x; scanf("%d",&x); // 输入 10 printf("%d",x); // 输出 10 getchar(); // 从缓冲区读取 '\n' getchar(); // 等待用户输入
cin和cout简介
cin – 标准输入流对象。 cout – 标准输出流对象。
大白话就是:cin是和输入有关的对象,cout是和输出有关的对象。
先看一个例子:
int x;
cin >> x; // 输入x
cout << x; // 输出x
我们先定义了一个int类型的整数x,然后使用 cin >> x 来从外界输入x的值。运算符 >> 是不是有些眼熟?没错,它在C语言中用于表示 右移运算符(用于位运算),比如 5(101) >> 2 == 2(10)。
在C++中,我们对 >> 的功能进行了扩充,赋予它第二个名字,提取运算符 。cin 和 >> 一起搭配使用,表示将输入流中的数据赋值给 ‘>>’ 右边的变量。
同样的,<< 除了表示左移运算符之外,在C++中还可以表示插入运算符,用于将数据写到标准输出流对象cout中,也就是显示在屏幕上。
进一步使用cin和cout
-
cin和cout包含在头文件 iostream中,使用前需要包含此头文件,如
#include<iostream> using namespace std; // using namespace std; int main() { cout << "I love you!"; return 0; }
-
运输符 >> 和 << 可以输入输出一连串的数据,cout还可以输出表达式的值,如
int x,y,z; cin >> x >> y >> z; // 输入10 11 12 cout << (x+1) << (y+1) << (z+1); //输出 11 12 13
-
可以输入输出多种基本数据类型的数据
不只是整数,浮点数,字符,字符串都可以输入
int a; float b; double c; char str[20]; cin >> a << b << c; cin >> str;
-
cout输出字符串时还可以使用转义字符
常见转义字符如下。
转义字符 含义 ASCll码值 \a 警报 7 \b 退格 8 \f 换页 12 \n 换行 10 \r 回车 13 \t 水平制表符 9 \v 垂直制表符 11 \\ \ 92 \’ ’ 39 \" " 34 \? ? 63 \0 0 0 -
cout默认不换行,推荐使用endl来换行
endl是换行操作符,作用类似’\n’,如
cout << "hello" << endl; // 与cout << "hello" << '\n';作用相同