我正在尝试输入一串字符,然后将它们向后输出
输入: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".
现在,为什么循环停止了?看看你的情况,你会找到答案.