连续的循环不会终止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; 

}

+3

UB。 UB。 UB。 UB。意味着未定义的行为。 'x'和'y'未初始化,你正在读*它们。 – Nawaz 2013-03-22 03:49:37

+5

'为(浮动Ÿ; Y perreal 2013-03-22 03:50:57

+0

指数未定义.... – CppLearner 2013-03-22 03:51:04

对于大于等于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 << ' '; 
    } 
} 
+0

谢谢堆:)所以它几乎是一个无限循环,因为x和y递减x = abs(x - (xx/2)) ; 是否有另一种方式表示,所以x和y增加 – KingKong 2013-03-22 08:40:52

+0

我认为你可以解决它没有分配值和x和y。检查我的代码 – 999k 2013-03-22 08:52:33

+0

非常感谢你,现在继续工作。是不工作的,因为我使用的是在for循环中初始化的相同的值,并且使用temp作为单个变量也存储了x和y的abs,而不受for循环的影响,所以它得到了正确的值? – KingKong 2013-03-22 09:21:32

你必须有设置自己的初始for循环值。假设你想他们是0

for(float y = 0; [...] 
{ 
    for(float x = 0; [...] 
    { 

否则在yx使用的值是随机的,取决于他们的声明之前包含什么记忆。

另外表达式:

x = abs(x - (xx/2)); 
    y = abs(y - (xx/2)); 

与来自输入xx常数将保持递减x和y(除非xx为负或= 0,这发生在xx小于2)因此导致无限循环。

+0

@downvoter介意解释倒票? – Shoe 2013-03-22 03:54:56

+0

-1:未定义的行为是正确的。但是无限循环条件不能通过纠正它来解决。看到我的答案。 – meyumer 2013-03-22 03:56:55

+0

@meyumer,哟,谢谢。固定的。 – Shoe 2013-03-22 03:58:36

首先,是不确定的行为。需要初始化xy

其次,你的xy永远不会大于xx(如果xx>=2),因为你有:

x = abs(x - (xx/2)); 
y = abs(y - (xx/2)); 

因此,无限循环。

+0

如果'XX = 1'它们将不被反正生长 – Shoe 2013-03-22 04:00:06

+0

请参阅括号中的信息:如果XX> = 2 – meyumer 2013-03-22 04:00:44

+0

我很愚蠢,我忘记了我们正在谈论'int's。 – Shoe 2013-03-22 04:03:16