cin 文件结束符
看了网上说的,c++的cin会检查“Ctrl + z”(Windows下)或“Ctrl + d" (Linux/Unix下)来判断输入是否结束。
其本质是检查cin.bad()的调用结果,若为true,则结束输入。
对于下面这两种情况:
1)
int val; vector<int> vals; while( cin >> val) { vals.push_back(val); }
2)
string val; vector<string> vals; while( cin >> val) { vals.push_back(val); }
对于1),由于输入的值要求能被转换为int,因此 在控制台输入 “ 1 5 7 ^z",回车后,会将 1, 5, 7 存入vector,而遇到 ^z时,由于无法转换,cin.bad()为true, 因此结束输入。因此,此时不仅可以输入 ctrl + z ,还可以输入任何非整数/浮点数 来作为结束符。
对于2),输入的值存为string,此时 若输入” a abc ^z",再回车, 由于^z之前有合法的字符串,因此^z也被当做一个char字符来处理,被放入输入缓冲区,而无法结束输入, 打印时,vals中 将输出“a abc ->".若想结束输入,则应该先输入”a abc"回车,将字符串录入,之后 再输入“^z"然后回车,表示输入结束。