一、关于输入运算符和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;
}
不知楼主是否满意?
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;
}
不知楼主是否满意?