在读取数量不定的输入数据时,经常使用while(std::cin >> value)作为循环条件,但在代码测试时,怎样才算是结束输入呢?
在C++ primer里面,对这个问题给了详细的解释,搬运如下:
表达式 “std::cin >> value”,从标准输入读取下一个数,保存在value当中。【表达式 “std::cin >> value”中的输入运算符(>>)接受一个istream(std::cin)作为其左侧运算对象,接受一个对象(value)作为其右侧运算对象。它从给定的istream读入数据,并存入给定对象中,返回其左侧运算对象作为其计算结果,也就是std::cin。】因此,循环条件实际上检测的是std::cin。
下面对std::cin加以说明,同样是在C++ primer上搬过来的:
C++语言并未定义任何输入输出语句,它包含了了一个全面的标准库来提供IO机制。常见的iostream库便是其一。iostream库包含了两个基础类型istream和ostream。一个流就是一个字符序列,是从IO设备读出或写入IO设备的。术语“流”想表达的是,随着时间的推移,字符是顺序生成或消耗的。
常见的cin是istream类型的对象。至于cin的原理可以参照https://mp.csdn.net/postedit/52248150里面的笔记内容,两年前写的,全然忘了,编程之路,需不间断,持之以恒呀。
当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即流未遇到错误,那么检测成功。当遇到文件结束符,或遇到一个无效输入时,istream对象的状态会变为无效。处于无效状态的istream对象会使条件变为假。【windows Ctrl+Z/ Unix Ctrl+D】