我已创建此代码,但效果不佳:
#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]);
}
}
有人能帮助我吗?谢谢 !
答案 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]。