2014-02-07 80 views
-1

在我所有的頭文件正確「鏈接」後,我終於達到了能夠正確編譯我的代碼的地步。當我做mariov1.c(如下所示代碼)我用20的測試輸入,其結果是3個hashmarks打印輸出然後我的CMD線的這樣以特定的方式打印特定的變量

###[[email protected] ~]$

現在它應該顯示有一個輸出21個空格和2個哈希標記添加一個哈希標記,並減去每行的空間,直到哈希標記的數量= usrHeight(本質上它並不是實際設置由哈希數決定,但它仍然以這種方式)。應該有看起來像這樣。

How High? 
10 
constructing... 
     ## 
     ### 
     #### 
     ##### 
    ###### 
    ####### 
    ######## 
    ######### 
########## 
########### 

這將保持對齊。

mariov1.c源

#include <cs50.h> 
#include <stdio.h> 

int main(void) 
{ 
    int usrHeight = 0; 
    int levelCounter = 0; 
    int paddIt = usrHeight - 1; 
    int hashCounter = 2; 


    do 
    { 
     printf("How high?\n"); 
     int usrHeight = GetInt(); 
    } 
    while (usrHeight > 23 || usrHeight < 0); 
    if (usrHeight >= 0 && usrHeight <= 23); 
    { 
     printf("constructing...\n"); 

    } 
    for (levelCounter = 0; levelCounter <= usrHeight; levelCounter++) 
    { 
      printf("%.*s\n", paddIt, ""); 
      for (int i = 0; i <= hashCounter; i++) 
       putchar('#'); 
      paddIt = paddIt - 1; 
      hashCounter = hashCounter + 1; 
    } 

} 

我用另一種做while循環與for循環在它的中間(敢肯定我做錯了),但它只是填補了使這個錯誤後進行第二次嘗試終端與哈希不斷,所以我不知道在這一點上去哪裏。

這裏的mariov2.c源

#include <cs50.h> 
#include <stdio.h> 

int main(void) 
{ 
    int usrHeight = 0; 
    int levelCounter = 0; 
    int paddIt = usrHeight - 1; 
    int hashCounter = 2; 


    do 
    { 
     printf("How high?\n"); 
     int usrHeight = GetInt(); 
    } 
    while (usrHeight > 23 || usrHeight < 0); 
    if (usrHeight >= 0 && usrHeight <= 23); 
    { 
     printf("constructing...\n"); 

    } 
    //doing a test to see if this do while loop will handle this appropriatelly 
    do 
    { 
     printf("%.*s\n", paddIt, ""); 
      for (int i = 0; i <= hashCounter; i++) 
     { 
      putchar('#'); 
      paddIt = paddIt - 1; 
      hashCounter = hashCounter + 1; 
      levelCounter = levelCounter + 1; 
     } 
    } 
    while (levelCounter <= usrHeight); 
    //commented area part of original code 
    //for (levelCounter = 0; levelCounter <= usrHeight; levelCounter++) 
    //{ 
     // printf("%.*s", paddIt, ""); 
     // for (int i = 0; i <= hashCounter; i++) 
     //  putchar('#'); 
     // paddIt = paddIt - 1; 
     // hashCounter = hashCounter + 1; 
    //} 

} 

回答

2

要注意的是,usrHeight您使用的是循環的第一件事是永遠0因爲在段

do 
{ 
    printf("How high?\n"); 
    int usrHeight = GetInt(); 
} 
while (usrHeight > 23 || usrHeight < 0); 

usrHeight是本地到這個範圍。一旦控制超出此範圍,並且您使用usrHeight它實際上是您在main函數範圍內定義的變量。從int usrHeight = GetInt();

刪除int你也已經計算了paddIt變量,你實際上已經使用GetInt()值初始化之前。

+0

這很有道理我今天帶着筆記本電腦工作我會看看我對代碼做了什麼編輯,這是我迄今爲止所做的改變(你告訴我的東西有道理,但我是今天早上有點密集。)所以我想看看我是否正確解釋了你的答案。 – dbrad

+0

我做了更改後,事情看起來很好。 – phoxis

+0

在do循環中從usrHeight中刪除int,然後在usrHeight = GetInt()後設置paddIt = usrHeight - 1;? – dbrad