gpt4 book ai didi

c++ - 如何避免此程序中的无限循环

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

我正在尝试用 C++ 解决一个 3n+1 问题。我想成对输入并计算其最大循环长度然后输出。

I/P: 1 10
100 200
201 210
900 1000
O/P: 1 10 25
100 200 125
201 210 89
900 1000 174

代码:

#include<iostream>
using namespace std;

int clen(int i)
{
int len=1;
while(i!=1)
{
len++;
if(i%2==0)
i/=2;
else
i=3*i+1;
}
return len;
}

int maxclen(int a, int b)
{
int i,len,maxlen=0;
for(i=a;i<=b;i++)
{
len=clen(i);
if(len>maxlen)
maxlen=len;
}
return maxlen;
}

main()
{
int b[10][2],l,i,len[10];
for(i=0;;i++)
{
cin>>b[i][0];
if(cin.fail())
{
cin.clear();
goto a;
}
cin>>b[i][1];
if(cin.fail())
goto a;

}
a:
l=i;
for(i=0;i<=l;i++)
{
if(b[i][1]>b[i][0])
len[i]=maxclen(b[i][0],b[i][1]);
else
len[i]=0;
}
for(i=0;i<l;i++)
cout<<b[i][0]<<" "<<b[i][1]<<" "<<len[i]<<endl;
}

我想在 cin.fail() 返回 true 时停止输入,但它在第一次执行程序时起作用,但之后它进入无限循环以输入数字,它就无法退出。谁能帮我解决这个 cin 问题,我怎样才能避免这个无限循环?

最佳答案

我发现如果你只输入一个数字后按 ctrl+d (eof) 它就死了。

也许尝试在此处添加另一个“清除”错误状态:

main()
{
int b[10][2],l,i,len[10];
for(i=0;;i++)
{
cin>>b[i][0];
if(cin.fail())
{
cin.clear();
goto a;
}
cin>>b[i][1];
if(cin.fail())
{
cin.clear(); // ADDED LINE
goto a;
}
}
...

虽然我无法 100% 重现错误 .. 这似乎对我的行为有所帮助。

而且你的数组只有 10 长..也许它读取太多并进入某种奇怪的状态?

关于c++ - 如何避免此程序中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556065/

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