反转字符串 - 输出会跳过最后一个字符

时间:2016-08-14 23:07:32

标签: c

我已创建此代码,但效果不佳:

#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

我不知道为什么它会在字符“#”之前打印出空白,而且它也不会打印字符&#39; a&#39;。

此外,如果我写这样的代码它完美地工作(我不知道为什么):

#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]);
    }
}

有人能帮助我吗?谢谢 !

2 个答案:

答案 0 :(得分:2)

C数组是0索引。

使用for(i = MAXLINE; i> 0; i - )

我将是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循环中,我&gt; 0,你永远不会做I = 0,所以永远不要得到arr [0]

for(i = MAXLINE-1; i&gt; -1; i - ){

我将是4,3,2,1,0

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

答案 1 :(得分:1)

这是一个索引问题。

在第一个区块中,您尝试按长度编制索引,这很糟糕。第一个字符的反向字符的索引为LENGTH - 1。

此外,您永远不会打印第一个块中的第一个字符,因为您的终止条件是(> 0)。但是你的第一个字符的索引为零。

要使第一个块工作所需要做的就是索引[i-1]而不是[i]。