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, "##");
我正在解决 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, "##");