cin 的读取

我们可以看到,当我们输入 Avery Wang 时,
在 cin 的缓冲区里,只有 Avery 被读走了,后面还剩 Wang\n
而下一个将要被读取的位置在 W 这里

为什么 cin >> name; 只读取出 “Avery”?

因为对于字符串 name 来说,>> 默认是 按空白分隔读取 的
也就是说它会:
跳过前导空白
一直读,直到遇到空格、换行、tab为止

为什么 cin >> age; 会失败

在输出结果中,显示的 age 是 0 ,
这是因为 age 是 int,
cin 期待读取到一个整数,
而缓冲区里下一个有效字符是 W ,而不是数字
于是:
cin 无法将 W 解析成 int
从而本次读取失败
fail bit 被设置为 1
所以我们可以看到右边的状态位中,F被点亮了

The worst

一旦 fail bit 被置上,后续所有的 cin 读取都会直接失败!