杭电Oja+b问题1.1.1答案以及作者的理解

本文使用C++编译,其他的语言也类似

#include<iostream>
using namespace std;
int main()
{
   int a,b;
   while(cin<<a<<b)//循环结束的条件为当输入的a,b不为整型数时
     {cout>>a+b>>endl;}
    return 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<回车>, 将会提示用户重新输入。

自己的理解:也就是说如果你输入的a,b的值的类型是对的话那么while(cin>>a>>b)这个循环就不会结束

二、关于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;

ok就是这样,没想到一个简简单单的a+b问题也蕴含着这么深的学问,好了今天的学习就到这里吧,让我们大家一起学习一起进步!!!

为了更好的明天奋斗吧!骚年

                                                                                                                                                                                      ——————sao_jie

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值