如何在这个程序中避免无限循环
How to avoid infinite loop in this program
我正在尝试解决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,但它的工作为几个程序的第一次执行,但在那之后,它进入一个无限循环输入数字,它只是不能出来。有人能帮我解决这个问题吗,我怎么才能避免这个无限循环?
我发现如果你只输入一个数字就按ctrl+d (eof)它就死机了
也许可以尝试在这里添加另一个'clear'错误状态:
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长。也许它读得太多了,进入了某种奇怪的状态?
这里有一个差一的错误:
for(i=0;i<=l;i++)
{
// ...
}
我像这样修改了你的main,以纠正几个问题:
int main()
{
const size_t length = 10;
int b[length][2], len[length];
size_t i = 0;
while(i < length)
{
cin >> b[i][0];
if(!cin) break;
cin >> b[i][1];
if(!cin) break;
++i;
}
for(int j = 0; j < i; j++)
{
if(b[j][1] > b[j][0])
len[j] = maxclen(b[j][0], b[j][1]);
else
len[j] = 0;
}
for(int j = 0; j < i; j++)
cout << b[j][0] << " " << b[j][1] << " " << len[j] << endl;
}
相关文章:
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 在控制台上输出我从文件中读取的整数,将程序插入无限循环
- 如何找出为什么我的程序一直有一个无限循环?
- Atmel Studio 7:ASF 库提供的 USART 中断处理程序仅在 main() 中遇到无限循环时工作一次?
- 对程序使用 switch 语句,导致选项的无限循环
- 无限循环使程序停止工作
- 为什么当用户输入除整数之外的任何内容时,我的程序会无限循环输出?C++
- 如何在 Windows 上的C++控制台应用程序中捕获 ctrl-c 事件,而不会进入无限循环
- 基本菜单驱动程序C ,无限循环
- 简单的TicTacToe.程序处于无限循环中
- 这是一个无限循环吗?程序提前完成
- 为什么我的程序在输入字符时有一个无限循环
- 角色计数程序无限循环
- 为什么我在程序集中的嵌套 for 循环会导致无限循环
- 如何在我的程序中突破无限循环
- 我的程序中的无限循环
- 使程序在无限循环中等待时使用更少的 CPU
- 从C++应用程序运行批处理脚本,并检查它是否具有无限循环
- 程序进入无限循环