不要从char palindrome []获得输出

问题描述 投票:0回答:3

我试图从用户输入中做出回文。

我将用户输入保存为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] = '\0';


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

    j++;
    --i;


} while (i != 0);

    palindrom[j] = '\0';

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

    return 0;
}
c palindrome
3个回答
5
投票

添加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.由于palindrom([0])的第一个字符被设置为eingabe([5])的最后一个字符“\ 0”,因此C将其视为一个空字符串。

将-i移动到循环顶部可以很容易地纠正这个问题:

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

1
投票

试试palindrom[j] = eingabe[i-1];而不是。


0
投票

即使这样也会奏效:

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

palindrom[j] = '\0';
© www.soinside.com 2019 - 2024. All rights reserved.