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初期化する必要があります。

第二に、あなたが持っているので、あなたのxandが(if )yよりも大きくなることはありません:xxxx>=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; [...]
    {

yそれ以外の場合、 andで使用される値xはランダムであり、宣言前に含まれていたメモリに依存します。

また、式:

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

with xxconstant from input は x と y の両方をデクリメントし続けます (xxが負または = 0 でない限り、xxが より小さい場合に発生し2ます)。したがって、無限ループにつながります。

于 2013-03-22T03:53:24.920 に答える
1

2数値が式よりも大きい場合は、減分x = abs( x - ( xx / 2 ) );されます。xだから無限ループ

たとえばxx == 2、式で値をデクリメントし、 for ループ内でインクリメントxするため、ループごとに同じままです。x1x = 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 に答える