簡體   English   中英

帶有C“ for”循環的麻煩-不會重復經過1st

[英]Trouble with a C “for” Loop - Won't iterate past 1st

我正在處理CS50的問題,在該問題中,我必須根據高度的用戶輸入在#的基礎上創建一個金字塔。 這是我到目前為止的內容,但是對於8的高度,它僅迭代一次。 對於高度7,我得到大約4行,只是#的混亂。

//Create GetPosInt() function
int GetPosInt(void) {
    int n = GetInt();
    while (n <= 0) {
        printf("That won't work...\nRetry: ");
        n = GetInt();
    }
    return n;
}

int main(void) {
    printf("How high should Mario's pyramid be?\nHeight: ");
    int h = GetPosInt();
    while (h > 23) {
        printf("Try something smaller!\nHeight: ");
        h = GetPosInt();
    } 
    char str[] = "##";
    char strad[] = "#";
    int l = h + 1;
    for (int i = 0; i < h; i++) {
        printf("%*s\n", l, str);
        strcat(str, strad);
        return 0;
    }
}

這是我第一次使用string.h庫。
請只提供修正我的代碼的提示-我敢肯定還有其他解決方法,但是如果可以的話,我想在課堂上繼續使用!

您的str數組/ C字符串沒有空間來連接除2個字符之外的其他字符。

作為一個小小的改變,你可以做:

char str[128] = "";
strcat(str, "##");

您的return 0; 在循環內,為什么。 這樣編輯:

    for (int i = 0; i < h; i++) {
      printf("%*s\n", l, str);
      strcat(str, strad);
    }
    return 0;

使用C編程語言,您必須自己管理內存。 使用strcat時,這些內存分配不會擴展。 相反,您將覆蓋超出為str分配的內存的內存。 我強烈建議您首先對C語言編程以及如何手動管理內存進行介紹。

您應該在循環之后返回。 第一次迭代完成后,您將離開函數。

另外,您應該嘗試將str定義為:char * str; str = malloc(sizeof(char)* 2); str = strcat(str,“ ##”);

並將strcat用作:str = strcat(str,strad);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM