2014-10-30 26 views
1

有人可以建议为什么主循环在第五次迭代后死亡永远不会完成 它的目标是将字符数组减少到1个最终元素?这 到目前为止,我已经得到了它,我完全消耗掉它们应该是11次迭代由呼叫乱七八糟C中的字符阵列

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

除了接受的答案还有其他错误, strlen(word)'为0时失效的几个地方'strlen(word) - 1';和'putchar('\ 0')'是一个错误。 ''\ 0''是一个不可打印的字符,它在内部用于标记字符串的结尾,但不应该尝试写入流 – 2014-10-30 02:48:28

回答

0

每次在主要执行外for循环字符串的大小减少1的计数器i也增加1终止每一次。这会导致您将循环运行一半的时间,你打算。

int size = strlen(word); 
for (i = 0; i < size; i++) { 
    \\same inner code 
} 

在上面的代码中为outer for loop解决了这个问题。

+0

实际上,这个代码对于什么任务是更准确的。一种字三角形。真的不能够感谢所有人。 – 2014-10-30 02:41:45

0

的是在for循环使用变量i and strlen错误返回。 i正在不断增加,字长正在减少。因此,在中期,环路因I> strlen的(字)

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; 
} 
+0

非常感谢您的输入。虽然循环明确简化了代码,这总是很好。 '我是一个noob,所以我倾向于过分复杂的功能。非常感谢 – 2014-10-30 02:31:37

相关问题