我有这个函数可以将一个字符数组(即一个字符串)变成一个直角三角形。它可以工作,但即使在阵列停止后它也会继续运行。所以输出总是有很多额外的空白行。
如果单词足够长,随机符号将出现在该空格的末尾。这可能是因为空格超出了 100 的数组大小。 我不知道是什么原因造成的。我试图为计数器和 printf 设置条件以换行,但这完全破坏了代码。我认为这绝对是新行的 printf,但在尝试之后现在看起来不像了。 有没有人看出哪里出了问题?
下面是我的代码中的远程函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define clear system("cls")
#define pause system("pause")
void triangulate(char stringArray[]){
int i,j,len = 0;
int counter=0;
len=strlen(stringArray);//a function library function that returns the length
printf("\n");
for(i=1;i<=len;++i){
for(j=1;j<=i;++j){
printf("%c",stringArray[counter]);
counter++;
}
printf("\n");
}
printf("len:%i counter:%i",len, counter);
pause;
}//end triangulate()
最佳答案
这是错误的:
for(i=1;i<=len;++i) {
for(j=1;j<=i;++j) {
printf("%c",stringArray[counter]);
counter++;
}
printf("\n");
}
你不能递增计数器这么多次。由于嵌套循环,counter
将访问越界位置 - 您正在将它递增到最终值,即与字符串长度相关的 O(n^2)。
关于c - 这个 "make a triangle loop"循环超过必要时间的任何原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505028/