2014-10-30 50 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