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过度编写现有值的下划线政策是什么?后者只会覆盖前一个吗?还有其他情况吗?
我查了很多书,但我找不到解释这个的书。
答案 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读取变量时,都会覆盖该变量的旧内容。
因此,您明确要求覆盖s
和i
。
答案 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。)