不要从 char palindrome[] 中获取输出

Dont get the output out of char palindrom[]

我正在尝试根据用户输入制作回文。

我将用户输入保存为 char eingabe 中的数组[] 使用 int 我正在计算所用数组的索引。

然后我想复制回文中eingabe的反转值,然后将它们都打印出来得到回文。

我的 i 和 j 计数正确,但我没有得到回文的输出。

希望你能帮助我。

#include <stdio.h>

int main(){
char eingabe[20];
char palindrom[20];
int i = 0;
int j = 0;  
char c;

do{
    c = getchar();
    if (c != EOF){
        eingabe[i] = c;
        i++;
    }
} while (c != EOF);

eingabe[i] = '[=10=]';


do{ 
    palindrom[j] = eingabe[i];

    j++;
    --i;


} while (i != 0);

    palindrom[j] = '[=10=]';

    printf("\n\n%s",eingabe);
    printf("%s\n\n",palindrom);

    return 0;
}

有时添加 printf 以查看发生了什么非常有帮助。例如,如果我添加:

do { 
    printf("palindrom[%d] = eingabe[%d]\n", j, i);
    palindrom[j] = eingabe[i];

那么输出是:

abcde
palindrom[0] = eingabe[5]
palindrom[1] = eingabe[4]
palindrom[2] = eingabe[3]
palindrom[3] = eingabe[2]
palindrom[4] = eingabe[1]
eingabe:   "abcde"
palindrom: ""

问题很明显:数组索引偏移 1。由于回文 ([0]) 的第一个字符被设置为 eingabe ([5]) 的最后一个字符“\0”,然后 C 将其视为空字符串。

这很容易通过将 --i 移动到循环顶部来更正:

do { 
    --i;
    palindrom[j] = eingabe[i];
    j++;
} while (i != 0);

请尝试 palindrom[j] = eingabe[i-1];

即使这样也行得通:

i=0;
do{ 
    palindrom[j++] = eingabe[i++];
} while ( eingabe[i]!='/0');
j=0;
do{ 
    palindrom[j++] = eingabe[i--];
} while ([i]>0);

palindrom[j] = '[=10=]';