gpt4 book ai didi

c++ - 当 ios::sync_with_stdio(0) 和 cin.tie(0) 写在循环内时奇怪行为的解释

转载 作者:行者123 更新时间:2023-11-28 01:19:24 25 4
gpt4 key购买 nike

我给出的输入是

5
1 1 1 1 1

有人可以向我解释这种行为吗?

我实际上是在一次在线编程竞赛中发现的。我得到错误的答案判决。虽然在我的电脑上它运行良好,但在线 IDE 出现运行时错误(总线错误)。所以我尝试了下面的代码(这实际上与原始问题的解决方案不同)但我猜的原理是一样的。如果我从这个解释中获得足够的洞察力,我可能还会理解原始解决方案的错误。如果没有,我会提出额外的问题。

#include <iostream>
using namespace std;

int main()
{
int t, a = 9;
cin >> t;
while(t--)
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> a;
cout << a;
}
}

以下代码在在线 ide 上运行时的输出为:99999(我在 codechef.com/ide 和 ide.geeksforgeeks.org 上测试过)

在我的计算机终端(Ubuntu、g++)上,输出如下:11111(当我将输入文件传递给它或在终端中手动输入数据时,这是真的)

只有当两个语句都在 while 循环内时才会出现这种奇怪的行为。当写在 while 循环上方时,输出符合预期。

最佳答案

根据 cppreference :

If [ios::sync_with_stdio] is called after I/O has occurred on the standard stream, the behavior is implementation-defined: implementations range from no effect to destroying the read buffer.

所以你不应该在你的循环中调用这个函数。相反,只需在 main 的开头调用它一次:

https://wandbox.org/permlink/fhpRNUGCXDef1bw4

关于c++ - 当 ios::sync_with_stdio(0) 和 cin.tie(0) 写在循环内时奇怪行为的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57245564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com