我正在研究CS50的一个问题,我必须根据用户输入的高度在#
中创建一个金字塔。这是我到目前为止所拥有的,但是对于8的高度,它只迭代一次。对于7的高度,我得到大约四行#
&#39>。
//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库 请仅提供有关修复我的代码的提示 - 我确定还有其他相关方法,但如果可以这样做,我想在课堂上保留它!
答案 0 :(得分:4)
你的str
数组/ C-String没有空间连接其他字符而不是2个字符。
你可以做一点改变:
char str[128] = "";
strcat(str, "##");
答案 1 :(得分:1)
你的return 0;
在循环中,因此为什么。按原样编辑:
for (int i = 0; i < h; i++) {
printf("%*s\n", l, str);
strcat(str, strad);
}
return 0;
答案 2 :(得分:1)
在C编程语言中,您必须自己管理内存。使用strcat时,这些内存分配不会扩展。相反,您将覆盖超出为str分配的内存的内存。我强烈建议您先介绍一下C编程以及如何手动管理内存。
答案 3 :(得分:0)
你应该在循环后返回。第一次迭代完成后,您将立即离开该函数。
另外你应该尝试将str定义为: char * str; str = malloc(sizeof(char)* 2); str = strcat(str,&#34; ##&#34;);
使用strcat as:str = strcat(str,strad);