2017-04-16 1 views
-1
#include <stdio.h> 
#include <cs50.h> 

int main(void) 
{ 
    int height, row, spaces, hashes; //declare all variables to be used  
    do //prompt the user for valid height inputs that are non-negative and less than 23. 
    { 
     printf("Height:"); 
     height = get_int(); 
    } while ((height < 0) || (height > 23)); 

    for (row = 1; row <= height; row ++) // iterate through each row of the height 
    { 
     for (spaces = (height - row); spaces >= 0; spaces--) //print the number of spaces for the ith row 
     { 
      printf(" "); 
     } 
     for (hashes = (row + 1); hashes <= (height + 1); hashes++) //print the number of hashes for each row 
     { 
      printf("#"); 
     } 
     printf("\n"); 
    } 
} 

私は上記のコードで何が欠けているのか分かりません。空白は期待どおりに印刷されますが、ハッシュの動作は反転され、最高と最低が印刷されます。CS50 Mario Pyramid in C - コードロジックによって期待どおりに出力されないハッシュ

+0

[Mario Style Pyramidを作成する]の可能な複製(http://stackoverflow.com/questions/38961481/creating-a-mario-style-ピラミッド) – Pharaoh

答えて

1

ユーザが高さとして12を送信したとします。
row = 1で外部ループを開始します.height - row = 11から0までのスペースは12スペースです。
ハッシュはrow + 1 = 2からheight + 1 = 13になり、12ハッシュになります。
ループの次の繰り返し:11スペース、11ハッシュ。

あなたが期待しているあなたは第二の内側のループを変更する場合に達成することができます。これはあなたが必要な正確に何をされていない場合、hashes = 1;にループの始まりを変更

for (hashes = 0; hashes < row; hashes++) //print the number of hashes for each row 

またはrow - 1;に終了またはものは何でも必要。

あなたの間違いは、hashes++がそれを上昇させると仮定することでした。これは技術的には可能ですが、ループの実行順序は変わりません。 hashesの実際の値は必要ないので、この順序は関係ありません。カウントされる唯一のものは、ループが実行される頻度です)

関連する問題