如何在C中向后迭代数组?

smo*_*hie 1 c arrays

我正在尝试输入一串字符,然后将它们向后输出

输入:Hello输出:olleH

我有一个有效的例子,但除了最后一个,我收到的每一封信都是如此.

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100

int main(void) {
int my_stg2[MAX_SIZE];
int i = 0;
int j;
char my_stg[MAX_SIZE];

int input ;

input = getchar();

while (input != '\n'){//The new line is the stopping point.


    my_stg2[i] = input;
    ++i;
 input = getchar();


}
    for (j=0;i>=0;i--){



    my_stg[j]  = my_stg2[i];
    j++;
}

printf("%s\n" , my_stg);

}
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的代码,但是我得到了大字符串的奇怪输出.有人可以为我修复循环吗?http://imgur.com/PK97b.png

Mia*_*rke 28

好.为了解决类似案例,你应该怎么做Kristopher约翰逊说,并通过它在纸上找出你的变量将如何你的程序的执行过程中发生改变.笔和纸是程序员最重要的工具之一.

只是因为我知道如果你不知道怎么做就很难做到这一点,让我来谈谈你.

假设输入"Hello\n".在开始循环之前,您将具有以下值:

i = 0 & input = 'H'
Run Code Online (Sandbox Code Playgroud)

然后你继续循环:

while (input != '\n') { my_stg2[i] = input; ++i; input = getchar(); }
Run Code Online (Sandbox Code Playgroud)

对于循环中的每次迭代,您的值将更改为:

i = 1 & input = 'e' & my_stg2[0] = 'H'
i = 2 & input = 'l' & my_stg2[1] = 'e'
i = 3 & input = 'l' & my_stg2[2] = 'l'
i = 4 & input = 'o' & my_stg2[3] = 'l'
i = 5 & input = '\n' & my_stg2[4] = 'o'
Run Code Online (Sandbox Code Playgroud)

所以.i现在是5.

您现在继续第二个循环,然后执行以下操作:

for (j = 0; j <= i; j++) { --i; my_stg[i] = my_stg2[j]; }
Run Code Online (Sandbox Code Playgroud)

你开始循环,并在减少i后你有以下值对:

j = 0 & i = 5 & my_stg[4] = my_stg2[0] = 'H'
j = 1 & i = 4 & my_stg[3] = my_stg2[1] = 'e'
j = 2 & i = 3 & my_stg[2] = my_stg2[2] = 'l'
Run Code Online (Sandbox Code Playgroud)

......在第三步,循环停止.你得到的输出是"leH".

现在,为什么循环停止了?看看你的情况,你会找到答案.

  • 这就是应该回答这样一个问题的方式.你的答案是一个模型.我希望每个人都像你一样关注初学者学习,而不仅仅是获得代表.如果我能再投票5次,我会的. (7认同)
  • 我的建议仍然是在纸上讨论这个并理解你的程序执行的原因.一旦理解了原因,修复问题将是微不足道的.不要试图通过牛仔来解决问题,也就是随机改变变量和条件,希望你能幸运.如果你想变得好,你需要学习这些东西. (2认同)