2016-08-14 138 views
0

我創建了這個代碼,但它不能很好地工作:倒車字符串 - 輸出跳過最後一個字符

#include <stdio.h> 
#define MAXLINE 5 

main() 
{ 
    char arr[MAXLINE] = {'a','b','c','d','e'}; 
    int i; 

    for(i = MAXLINE; i > 0; i--){ 
     printf("%c", arr[i]); 
    } 
} 

這是輸出:

edcb 

我不知道爲什麼它在字符'e'之前打印一個空白,並且它不打印字符'a'。

而且如果我寫的代碼,這樣它完美的作品(我不知道爲什麼):

#include <stdio.h> 
#define MAXLINE 5 

main() 
{ 
    char arr[MAXLINE] = {'a','b','c','d','e'}; 
    int i; 

    for(i = MAXLINE-1; i > -1; i--){ 
     printf("%c", arr[i]); 
    } 
} 

有人能幫助我嗎?謝謝 !

+6

C中的索引從0開始到MAXLINE-1結束(在你的情況下)。 – usr2564301

+0

在第一個代碼中,你只需要改變'i = MAXLINE; i> 0'到'i = MAXLINE-1; i> = 0'因爲你想去0而不是1。 –

回答

2

C數組索引爲0。使用

爲(I = MAXLINE; I> 0;我 - )

我將5,4,3,2,1

arr[5] = some character after the arr array 
arr[4] = e 
arr[3] = d 
arr[2] = c 
arr[1] = b 

從你的while循環中,I> 0 ,從來不知道I = 0,因此永遠不會常用3 [0]

爲(ⅰ= MAXLINE-1; i> -1; I - ){

我將在4,3,2, 1,0

arr[4] = e 
arr[3] = d 
arr[2] = c 
arr[1] = b 
arr[0] = a 
1

這是一個索引問題。

在第一個塊中,您嘗試按長度進行索引,這很糟糕。第一個字符的反向字符的索引爲LENGTH - 1.

另外,由於您的終止條件爲(> 0),您將永遠不會打印出第一個塊中的第一個字符。但是你的第一個角色的索引爲零。

所有你需要做的第一個塊的工作是索引[i-1]而不是[i]。