gpt4 book ai didi

c++ - cout 语句如何影响编写的代码的 O/P?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:32 26 4
gpt4 key购买 nike

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main() {
int t;
double n;
cin>>t;
while(t--)
{
cin>>n;
double x;
for(int i=1;i<=10000;i++)
{
x=n*i;
if(x==ceilf(x))
{
cout<<i<<endl;
break;
}
}
}
return 0;
}

对于 I/P:

352.983.16

O/P:

1

If my code is:

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main() {
int t;
double n;
cin>>t;
while(t--)
{
cin>>n;
double x;
for(int i=1;i<=10000;i++)
{
x=n*i;
cout<<"";//only this statement is added;
if(x==ceilf(x))
{
cout<<i<<endl;
break;
}
}
}
return 0;
}

对于相同的输入O/P是:

15025

第二个代码中唯一添加的额外行是:cout<<"";

任何人都可以帮助找出为什么仅仅因为在第二个代码中添加了 cout 语句,输出就会有这样的差异吗?

最佳答案

这是名副其实的 Heisenbug .我试图将您的代码简化为一个最小的复制示例,并以这个 (http://ideone.com/mFgs0S) 结尾:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
float n;
cin >> n; // this input is needed to reproduce, but the value doesn't matter
n = 2.98; // overwrite the input value
cout << ""; // comment this out => y = z = 149
float x = n * 50; // 149
float y = ceilf(x); // 150
cout << ""; // comment this out => y = z = 150
float z = ceilf(x); // 149
cout << "x:" << x << " y:" << y << " z:" << z << endl;
}

ceilf 的行为似乎取决于围绕它发生的 iostream 操作的特定序列。不幸的是,我目前没有办法进行更详细的调试,但也许这会帮助其他人弄清楚发生了什么。不管怎样,几乎可以肯定这是 gcc-4.9.2 和 gcc-5.1 中的错误。 (你可以在 ideone 上查看你在 gcc-4.3.2 中没有这种行为。)

关于c++ - cout 语句如何影响编写的代码的 O/P?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34923020/

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