C "for" 循环出现问题 - 不会迭代第一个

Trouble with a C "for" Loop - Won't iterate past 1st

我正在解决 CS50 的问题,我必须根据用户输入的高度从 # 中创建一个金字塔。这是我目前所拥有的,但是对于 8 的高度,它只迭代一次。对于 7 的高度,我得到大约四行,只是乱七八糟的 #

//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 库。
请仅提供有关修复我的代码的提示 - 我确定还有其他方法,但如果可能的话,我想在 class 期间保持如此!

您的 return 0; 在循环中,因此是原因。如此编辑:

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

你应该在循环之后return。您将在第一次迭代完成后立即离开该函数。

您还应该尝试将 str 定义为: 字符 * 海峡; str = malloc(sizeof(char)* 2); str = strcat(str, "##");

并将 strcat 用作:str = strcat(str,strad);

在 C 编程语言中,您必须自己管理内存。当您使用 strcat 时,这些内存分配不会扩展。相反,您将覆盖分配给 str 的内存之外的内存。我强烈建议您首先介绍一下 C 语言编程以及如何手动管理内存。

您的 str array/C-String 没有空间连接 2 个字符以外的其他字符。

您可以做一些小改动:

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