连续循环不会终止C ++

时间:2013-03-22 03:48:28

标签: c++ if-statement for-loop

我多年来一直在努力找到这个问题,我似乎无法理解它。 当输入高于值2的数字时,程序只是连续输出''或'*'并且不会终止,并给出正确的输出。

谁能看到我做错了什么?这是我的代码:

#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 个答案:

答案 0 :(得分:4)

首先,存在未定义的行为。 <{1}}和x需要初始化。

其次,您的yx永远不会超过y(如果xx),因为您拥有:

xx>=2

因此无限循环。

答案 1 :(得分:1)

您必须在那里设置初始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时发生)因此导致无限循环。

答案 2 :(得分:1)

对于大于等于2的数字,您的表达式x = abs( x - ( xx / 2 ) );会导致x递减。如此无限循环

例如,如果xx == 2,那么x对于每个循环保持相同,因为您在x表达式中将1值递减x = abs( x - 1);并在内部递增环

另请在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 << ' ';
    }
}