Chapter 1 Getting Started
1.2 初识输入输出对象
C++ 并未定义任何 IO 语句,取而代之,包含了一个全面的库来提供 IO 机制。如 iostream 库,这个库包含两个基础类型 istream 和 ostream,分别表示输入流和输出流,一个 stream 就是一个字符序列,术语 stream 表示:随着时间的推移,字符是顺序生成或消耗的。
标准输入输出对象
- cin: 发音为 see-in,标准输入
- cout:发音为 see-out,标准输出
- cerr:发音为 see-err,标准错误,常用来输出警告和错误信息
- clog:发音为 see-log,用来输出程序运行时的一般性信息
要想使用 iostream 库,包含头文件:
#include <iostream>
向流写入数据
std::cout << "Enter two numbers:";
std::cout << std::endl;
- 输出运算符 (<<),<< 运算符接受两个对象,左侧必须是一个 ostream 对象,右侧则是要打印的值。
- 第二个运算符 endl,是成为操纵符(manipulator)的特殊值。写入 endl 的效果是结束当前行,并将于设备关联的缓冲区(buffer)中的内容印刷到设备中。缓冲刷新操纵可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。
使用标准库中的名字
程序使用了 std::cout 和 std::endl,都指出了名字 cout 和 endl 是在名为 std 的命名空间(namespace)中的而(::)就是作用域运算符。
简而言之,就是防止重名。
从流读取数据
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
输入运算符(>>)与输出运算符类似,接受一个 istream 作为左侧运算对象,接受一个对象作为右侧运算对象。
1.3 注释简介
两种注释:单行注释(//)和界定符对注释(/**/)。
注释界定符不能嵌套,切莫作死。
1.4 控制流
1.4.1 while 语句
while (condition)
statement
1.4.2 for 语句
for (init-statement,condition,expression)
statement
1.4.3 读取数量不定的输入数据
while (std::cin >> value)
当我们使用一个 istream 对象作为条件时,其效果是检测流的状态。如果流是有效的,那么检测成功。当遇到文件结束符(end-of-file),或遇到一个无效输入时,istream 对象的状态会变成无效,此时判断条件为假。
当从键盘向程序输入数据时,windows 系统中,输入文件结束符的方法是敲 Ctrl+Z,然后按 Enter 或 Return 键。
1.4.4 if 语句
C++ 中用 = 进行赋值,用 == 作为相等运算符。
# include <iostream>
int main()
{
// currVal是我们正在统计的数;我们将读入的新值存入val
int currVal = 0, val = 0;
// 读取第一个数,并确保确实有数据可以处理
if (std::cin >> currVal) {
int cnt = 1; // 保存我们正在处理的当前值的个数
while (std::cin >> val) { // 读取剩余的数
if (val == currVal) // 如果值相同
++cnt; // 将cnt加1
else { // 否则,打印前一个值的个数
std::cout << currVal << " occurs "
<< cnt << " times" << std::endl;
currVal = val; // 记住新值
cnt = 1; // 重置计数器
}
} // while循环在这里结束
// 记住打印文件中最后一个值的个数
std::cout << currVal << " occurs "
<< cnt << " times" << std::endl;
} // 最外层的if语句在这里结束
return 0;
}