1.2 初窥输入/输出
前言:C++并没有直接进行输入或输出(IO)的任何语句,想要实现输入与输出,需要用到标准库。最常用的为处理格式化输入和输出的iostream库,其基础是两种命名为istream和ostream的类型(What the hell the 类型 is? Class?)。
1.2.0 程序先走起吧
#include <iostream>
int main()
{
std::cout << "Enter two number:" << std::endl;
int v1, v2;
std::cin >> v1 >> v2;
std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1+v2 << std::endl;
return 0;
}
1.2.1 标准输入与输出对象
哎,上面的程序对于我一个C++初学者来说实在是看不懂啊,虽然已经名义上做了两年码农了。不过不用怕,慢慢来!
标准库定义了4个IO对象,它们是:
处理输入时使用的istream类型对象:
std::cin // called see-in
处理输出时使用的ostream类型对象:
std::cout // called see-out
用来输出警告和错误信息给程序使用者的对象:
std::cerr //called see-err
用于产生程序执行的一般信息的对象:
std::clog //called see-log
这样一来,上述程序中的好动东东知道是干啥的了,输入输出用的嘛。
Keys:
#include <iostream>
是个预处理指示,尖括号里面是一个头文件名字,要用到人家嘛当然要写上人家的名字喽。std::cout
中的std
是个什么鬼东西哎?!好吧,是命名空间(namespace)奥。::
是作用域操作符(scope operator),很明显,指的就是std
中的cout
喽!
1.2.2 写入到流
上文提到了用于输出的istream类型对象std::cout
是用来写入到流的,那么我们可以用输出操作符<<
把要写入的内容添加到std::cout
当中。
std::cout << "Enter two numbers:" << std::endl;
因为输出操作符<<
返回的是一个stream
类型的对象,因此在上述代码中,连续使用两个<<
其实是与下句等价的。
std::cout << "Enter two numbers:";
std::cout << std::endl;
值得一提的是,std::endl
是一个特殊值,称为操纵符(manipulator)。将它写入到输出流时,具有输出换行的效果,同时能够刷新与设备相关的缓冲区(buffer)。
Tips:
- 在调试程序的时候,往往需要插入输出语句,这些语句都应该刷新输出流
std::endl
!否则,在程序出现错误的时候,可能会导致输出停留在buffer中,造成程序崩溃位置的错误判断
1.2.3 从流读入
int v1, v2;
std::cin >> v1 >> v2;
看了上面的写入到流,这里也就不难理解啦啊,从流中读入并赋值给v1
和v2
。
习题,科科
Tips:
讲真,在写C++程序时,通常可以使用换行符代Enter
替代空格符space
。但是有两种情况下不行奥:
- 字符串字面值中的空格不能用换行符替代
- 在预处理指示(忘记是啥了?就是用到人家时要加上人家名字的头文件哎,伤脑筋)中的空格不能用换行符替代
所以,下面的Code
依然work
!
#include <iostream>
int main()
{
std::cout << "Enter two number:"
<< std::endl;
int v1, v2;
std::cin >> v1
>> v2;
std::cout << "The sum of "
<< v1
<< " and " << v2
<< " is " << v1+v2
<< std::endl;
return 0;
}