连续的循环不会终止C++
问题描述:
我一直在试图寻找过这个问题了好半天,我不能显得太让我的头周围。 当输入上述值2的数,程序只是汽车无输出“”或“*”和不终止,并给正确的输出。连续的循环不会终止C++
有人能看到什么即时做错了什么?这里是我的代码:
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int xx;
cout << "Enter the Height (odd positive numbers only): " << endl;
cin >> xx;
for(float y; y < xx; y++)
{
for(float x; x < xx; x++)
{
x = abs(x - (xx/2));
y = abs(y - (xx/2));
if((x + y) <= (xx/2))
cout << '*';
else
cout << ' ';
}
cout << endl;
}
return 0;
}
答
对于大于等于2
的数字,您的表达式x = abs(x - (xx/2));
导致x
减少。因此,无限循环
例如,如果xx == 2
因为你是1
表达x = abs(x - 1);
递减x
值和循环递增里面,然后x
保持相同的每个循环
也请intialize在for循环
变量编辑:新设计
int temp1, temp2;
for(float y=0; y < xx; y++)
{
for(float x=0; x < xx; x++)
{
temp1 = abs(x - (xx/2));
temp2 = abs(y - (xx/2));
//if((abs(x - (xx/2)) + abs(y - (xx/2))) <= (xx/2))
if((temp1 + temp2) <= (xx/2))
cout << '*';
else
cout << ' ';
}
}
答
你必须有设置自己的初始for
循环值。假设你想他们是0
:
for(float y = 0; [...]
{
for(float x = 0; [...]
{
否则在y
和x
使用的值是随机的,取决于他们的声明之前包含什么记忆。
另外表达式:
x = abs(x - (xx/2));
y = abs(y - (xx/2));
与来自输入xx
常数将保持递减x和y(除非xx
为负或= 0,这发生在xx
小于2
)因此导致无限循环。
UB。 UB。 UB。 UB。意味着未定义的行为。 'x'和'y'未初始化,你正在读*它们。 – Nawaz 2013-03-22 03:49:37
'为(浮动Ÿ; Y
perreal
2013-03-22 03:50:57
指数未定义.... – CppLearner 2013-03-22 03:51:04