Не получайте вывод из char palindrom [] - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь сделать палиндром из пользовательского ввода.

Я сохраняю пользовательский ввод в виде массива в char eingabe [] с подсчетом индекса используемых массивов.

Затем я хочу скопировать обратное значение eingabe в палиндром, а затем распечатать оба из них, чтобы получить палиндром.

Мои i и j считаются правильно, но я не получаю вывод для palindrom.

Надеюсь, вы мне поможете.

#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;
}

Ответы [ 3 ]

5 голосов
/ 23 апреля 2019

Иногда очень полезно добавить 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 голос
/ 23 апреля 2019

Попробуйте palindrom[j] = eingabe[i-1]; Вместо.

0 голосов
/ 23 апреля 2019

даже это будет работать:

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

palindrom[j] = '\0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...