Почему не работают цифры?

Программа должна определять палиндромы (слова с симметричным расположением символов) и выводить их на экран. Со словами всё хорошо, и работает это вроде как корректно, по крайней мере багов я не обнаружил. Но с цифрами другая история - программа не видит, что введенное число является палиндромом.

В чём моя ошибка и как это исправить?

#include <stdio.h>
#define N 256

int main() {
    int i = 0;
    char str[N];
    char word[N];
    int count_p = 0;
    while (((str[i] = getchar()) != '\n') && (i < N))
        i++;
    str[N - 1] = '\0';

    int j = 0, s = 0;
    for (int i = 0; i < N; i++) {
        if (str[i] != ' ') {
            s++;
            word[j] = str[i];
            j++;
        }
        else {
            int sum = 0;
            for (int i = 1; i <= s; i++)
                if (word[i - 1] == word[s - i]) sum++;
            if (sum == s) {
                for (int i = 0; i < sum; i++)
                    printf("%c", word[i]);
                count_p++;
            }
            printf(" ");
            s = 0;
            j = 0;
        }
    }
    printf("Was palindrome: %d.", count_p);
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

У вас очень странная логика, так что ее надо или существенно переписывать, или это будет выглядеть как на автомобиле привязанная шнурочком деталь. Вот два шнурочка.

  1. У вас строка завершается нулевым символом очень далеко (N-1), а надо бы после введенной строки. Можно дописать это обнуление, а можно шнурочек — просто занулять сразу весь массив перед работой: char str[N] = {0};.

  2. Ваша логика завязана на то, что слово заканчивается пробелом (кстати, дело у вас не в цифрах... введите просто один палиндром — он не будет пойман с большой вероятностью. Введите число среди других — поймает) — поэтому вот второй шнурочек — после цикла while дописать str[i] = ' ';.

Попробуйте.

P.S. И к чему у вас в вопросе метка случайные-числа? или хотя бы просто числа? Ими тут и не пахнет. Вы даже введенное число рассматриваете как строку, а не как число...

→ Ссылка