有人可以建议为什么主要循环在第五次迭代后永远不会完成 它的目标是将字符数组减少到1个最终元素?我已经明白了 远和我完全消耗,因为它们应该是11次迭代,如调用返回
size_t strlen( char const *str )
{
int length = 0;
while (*str++ !='\0')
{
length += 1;
}
return length;
}
void abracadabra( char *word )
{
int i, c;
int len = strlen(word)-1;
for (i = 0; i <= len; i++)
{
putchar(*word);
putchar(' ');
*(word++);
}
}
int main()
{
char word[250];
int i, j;
printf ("enter your word:\n");
scanf ("%[^\n]s", &word);
for (i = 0; i <= strlen(word)-1; i++)
{
abracadabra(word);
putchar('\0');
printf("\n");
for (j = 0; j <= i; j++)
{
putchar('\0');
}
word[strlen(word) - 1] = '\0';
}
word[strlen(word)-1] = '\0';
printf("\n");
system("pause");
return 0;
}
答案 0 :(得分:0)
在i and strlen
循环中使用变量for
是错误的。 i
不断增加,字长也在减少。所以在中间,由于i&gt; strlen(word)
int main()
{
char word[250];
int i, j;
printf ("enter your word:\n");
scanf ("%[^\n]s", &word);
// for (i = 0; i <= strlen(word)-1; i++)
while ( strlen(word) )
{
abracadabra(word);
putchar('\0');
printf("\n");
word[strlen(word) - 1] = '\0';
}
word[strlen(word)-1] = '\0';
printf("\n");
system("pause");
return 0;
}
答案 1 :(得分:0)
每次在main中执行外部for循环时,字符串的大小减1.计数器i每次也增加1。这会导致您运行循环的一半时间。
int size = strlen(word);
for (i = 0; i < size; i++) {
\\same inner code
}
为main中的外部for循环子代上面的代码解决了这个问题。