2016-12-10 10 views
1

私はCS50x問題セット1を開始しました。しかし、私のプログラムは、私が高さのための数字を入力した後に停止するようだ。cs50xマリオピラミッドは描画しません

I.e.プログラムは8から23の間の番号を要求し(正しい入力が得られるまで繰り返します)、そうするとコードが停止します。

私はここで何が間違っていますか?

以下は私が書いたコードです。私はここで様々な質問を見てきたので、すべての助けが非常に高く評価されるでしょう。この問題に対処するものはありません。


include stdio.h 
include cs50.h 

int main (void) 

{ 

printf("ok lets make a pyramid :)\n"); 

    // height = x 

    int x; 

    // spaces = z 

    int z; 

    // hashes = a 

    int a; 

    // Get correct number for height 

    do 
    { 
     printf("Give me a positive number between 8 and 23 for the height of the pyramid\n"); 
     x = GetInt(); 
    } 

    while (x < 8 || x > 23); 

    // Build the phantom pyramid 

    for (int q = 0; q == x; q++) 
    { 

    // Spaces 

     for (z = x - 1; z == 0 ; z--) 
     { 
      printf(" "); 
     } 

      // Hashtags 

      for (a = 1; a == q; a++) 
      { 
       printf("#\n"); 
      } 
    }} 

+0

おそらく、あなたはこれをここで尋ねるべきです:http://cs50.stackexchange.com/ – yLaguardia

答えて

0

さておき(#include <stdio.h>)あなたの#include構文が間違っていることから、あなたの根本的なここでの問題、そしてあなたのプログラムが何も印刷せずに終了した理由は、メインforループに入ることはありませんということです。 C forループは、制御式がtrueのときに実行され、isがtrueになるまで実行されません。あなたは持っている:

for (int q = 0; q == x; q++){ ... } 

q == xq0で、xは8と23の間にあるので、このループが実行されることはありません、0(偽)と評価され、プログラムが終了するので。各ループにこの問題があります。あなたはそれを修正することができます:ここで

for (int q = 0; q < x; q++) 
    { 
    // Spaces 

     for (z = x - 1; z > 0 ; z--) 
     { 
      printf(" "); 
     } 

      // Hashtags 

      for (a = 0; a <= q; a++) 
      { 
       printf("#"); 
      } 
      printf("\n"); 
    } 

は、そうaは、最初の行に単一のハッシュを印刷するには0で開始しなければならない、ループを通る最初のパスでは、qが0であることに注意してください。また、改行文字は、ループが行を印刷するまで印刷されません。これらの変更は、8の高さのために、この出力を与える:

 # 
     ## 
     ### 
     #### 
     ##### 
     ###### 
     ####### 
     ######## 

私は、これはあなたが望む出力であるかどうかわからないです。左の間隔はピラミッドの高さに結びついています。あなたは左のピラミッドの手順が必要な場合は、関連するfor文を変更することができます。

for (z = x - 1; z > q ; z--) 

しかし、私はマリオピラミッドは、左の手順、および一番上の行に2つのハッシュを持っていたという印象の下にありました。これを行うにはループを変更することができますが、ここでは別のループがあります。あなたは、変数aを必要とする、というより、「スペース」としてzのことを考えて、ラインの位置を表すようなものとは思わない:

for (int q = x; q > 0; q--) { 

    // print spaces at beginning of line 
    for (z = 1; z < q; z++) { 
     printf(" "); 
    } 

    // print hashes at end of line 
    for (; z < x + 2; z++) { 
     printf("#"); 
    } 
    // print newline when finished printing line 
    printf("\n"); 
} 

新しいループが8の高さのために、この出力を与える:

 ## 
     ### 
    #### 
    ##### 
    ###### 
    ####### 
######## 
######### 
+0

ヘイデイヴィッド私は決してあなたにこの答えを残してくれてありがとうございました。 –

+0

助けていただきありがとうございます:) –

+0

確かなこと:)私は最後にこのものを見ていたので私と私の妻は赤ちゃんがいたので、もう一度それを選ぶ必要があります。多分私はあなたの助けを求めることができる将来的にいくつかの問題に遭遇したら? –

関連する問題