0

多年来,我一直在努力寻找这个问题,我似乎无法理解它。当输入大于值 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;

}

4

3 回答 3

4

首先,存在未定义的行为。x并且y需要初始化。

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

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

因此无限循环。

于 2013-03-22T03:55:55.073 回答
1

您必须在那里设置初始for循环值。假设您希望它们是0

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

否则,yand中使用的值x是随机的,取决于声明之前的内存内容。

还有表达式:

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

xx输入常数将不断递减 x 和 y(除非是xx负数或 = 0,当xx小于时会发生这种情况2)因此导致无限循环。

于 2013-03-22T03:53:24.920 回答
1

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

例如 if xx == 2, thenx对于每个循环都保持不变,因为您通过in 表达式递减x值并在 for 循环内递增1x = 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 << ' ';
    }
}
于 2013-03-22T03:56:10.393 回答