标题:请问一下cin的返回值是什么?
只看楼主
lix66
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-4-25
得分:0 
一、关于输入运算符和cin的成员函数
cin >> a;
>> 是运算符, 有运算结果, 结果就是cin本身。
正因如此, 才可以书写下面语句:
cin >> a >> b;
该语句中的 >> 运算从左至右进行, 第一步 cin >> a 的结果是 cin
因此 cin >> a >> b 在完成a的输入后, 就变成了 cin >> b, 相当于
(cin >> a) >> b;

若用输入数据时发生了错误, 可用 cin.bad()、cin.fail()、cin.eof()来检测, 正如前面的回复所说。
另一种方法是用cin.good()来判断输入是否成功。下面是一个演示程序:
int a;
cin >> a;
while (! cin.good())
{
  cin.clear(); // 清除错误标记
  cin.sync();  // 清除已输入的字符
  cout << "请重新输入: ";
  cin >> a;    // 重新输入
}
cout << "a = " << a << endl;
如果用户输入 haha<回车>, 将会提示用户重新输入。

二、关于cin的类型转换
if(...) 和 while (...) 语句的条件表达式, 被视为逻辑值, 非零为真, 零为假。
当 cin 出现在 if 语句和 while 语句的条件表达式中时, 将会自动转换为 bool 类型。
下面是 cin 转换为 bool 类型的例子:
bool b;
b = cin; // cin 转换为 bool 值并赋值给变量 b

cin 转换为逻辑类型时, 到底是什么值呢? 它是根据 cin 的状态决定的, 其结果与good函数的值一致。
所以可以将上面的演示程序可以简化为:
int a;
cin >> a;
while (! cin)
{
  cin.clear(); // 清除错误标记
  cin.sync();  // 清除已输入的字符
  cout << "请重新输入: ";
  cin >> a;    // 重新输入
}
cout << "a = " << a << endl;

这个程序中有两处书写了相同的代码 cin >> a, 而该运算的结果就是 cin, 故可以再简化为:
int a;
while (! (cin >> a))
{
  cin.clear(); // 清除错误标记
  cin.sync();  // 清除已输入的字符
  cout << "请重新输入: ";
}
cout << "a = " << a << endl;

现在再看ACM的程序就不难看懂了。
int main()
{
  int a, b;
  while (cin >> a >> b)
  {
    cout << a + b << endl;
  }
  return 0;
}

不知楼主是否满意?
2011-04-25 21:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-202310-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.245477 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved