关于 cin 和 scanf() 的返回值

发布于 2020-11-02  158 次阅读


scanf() 返回成功读入元素的个数,返回值为 int 型,但如果未成功读入(正确按指定格式输入变量)则返回相应的数量,遇到文件结尾或发生了错误的时候返回 EOF 文件结束标志(Ctrl-Z、Ctrl-D)。所以我们就出现了这样的用法:

while (scanf("%d%,&n) != EOF)

由于 cin 实际上是一个 istream 对象,“cin>>s1” 这样的用法不应该有返回值。但是事实上,这样的用法很多见:

while (cin>>s1>>a)

其中 s1 定义为 string,a 是一个整型数字。实质上 “>>” 操作符接受一个 istream 对象为左操作数,另一个对象为右操作数。“cin>>s1” 中返回了 cin 对象,操作符是主格。

输入缓冲是行缓冲,回车时 cin 会检测输入缓冲区中的可读数据。

所以在最后不返回 cin 对象时,我们的 while 就停止啦。


三叶望久,往复新秋。