关于std :: cin的一个问题

时间:2009-12-27 03:11:08

标签: c++

int i,j;

std::string s;

std::cin>>i>>j>>s>>s>>i;

std::cout<<i<<" "<<j<<" "<<s<<" "<<i;

问题 参考上面的示例代码,如果给出的输入字符串是“5 10 Sample Word 15 20”,那么显示的输出是什么?

答案是

15 10 Word 15

我有一个问题是cin过度编写现有值的下划线政策是什么?后者只会覆盖前一个吗?还有其他情况吗?

我查了很多书,但我找不到解释这个的书。

3 个答案:

答案 0 :(得分:12)

std::cin >> i >> j >> s >> s >> i;

相当于:

std::cin >> i;
std::cin >> j;
std::cin >> s;
std::cin >> s;  // overwrite previous s
std::cin >> i;  // overwrite previous i

每次从cin读取变量时,都会覆盖该变量的旧内容。

因此,您明确要求覆盖si

答案 1 :(得分:1)

>>表示法令人困惑,如果您将其重写为operator>>(),它看起来很难看,但可以帮助您了解函数调用的工作方式。

这一行

std::cin >> i >> j >> s >> s >> i;

相当于

std::cin.operator>>(i).operator>>(j).operator>>(s).operator>>(s).operator>>(i);

operator>>()的{​​{1}}会返回对自身cin的引用。因此,每一步都是对cin operator>>()的单独调用,保证按从左到右的顺序进行。

答案 2 :(得分:0)

当你“重写”给s时,你破坏了先前的s值。 (这是样品)。我保持不变的原因是因为i的值是/保持15(你仍然覆盖了我;但是,你用相同的数据覆盖了它,15。)