我多年来一直在努力找到这个问题,我似乎无法理解它。 当输入高于值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;
}
答案 0 :(得分:4)
首先,存在未定义的行为。 <{1}}和x
需要初始化。
其次,您的y
和x
永远不会超过y
(如果xx
),因为您拥有:
xx>=2
因此无限循环。
答案 1 :(得分:1)
您必须在那里设置初始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
时发生)因此导致无限循环。
答案 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 << ' ';
}
}