Перевести строку символов из hex в ascii

На вход подаётся строка в hecx в виде непрерывной строки либо парами через пробел. Ввод должен закончиться кнопкой энтер

57 58 59 56
57585956

На выходе я должен получить

WXY

Символ V должен отсечься

Вот мой код:

// Online C compiler to run C 

#include <stdio.h>

int main() {
    // Write C code here
    printf("+++++++++++++");
    int i, j=1;
    char err;
    
while (j<4) {
    scanf("%X",&i);
    if (i<256){
        printf("---------\n");
        printf( "%c \n",i);
        printf("-------end%d\n", j) ;
        j++;
    }
    if(err == '\n') {
        break;
    }
}
    

while(j>1){
    printf("%c", i);
    j--;
}
return 0;}

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

У меня есть работающий код, но он не мой.в какой-то степени я упростил чужой код до состояния написанного, что бы самому дойти до осознания как он работает постепенно его усложняя.

Сейчас в написанном есть пару лишних конструкций в сравнении с чужим кодом.

Прошу помочь разобраться. Если будут другие команды в коде прошу объяснить ибо на данный момент я знаю только то что написано!!

Upd 1 Теперь суть в том чтобы на сплошной последовательности программа завершала работу без вывода чего либо! + Цикл не должен ограничиваться тремя выводимыми символами

ниже мой код

while (1) {
    scanf("%2X",&i);
    printf("%c \n",i);
    if (getchar()!=' '){
        printf("-------end%d\n", j);
        break;
    }
}

При вводе 5758 программа выдает от W что меня не устраивает


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

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

У Вас в цикле увеличивается i, а надо увеличивать j

while (j<4) 
{
    scanf("%X",&i);
    if (i<256){
        printf("---------\n");
        printf( "%c \n",i);
        printf("-------end%d\n", j) ;
        j++; // вот здесь нужно увеличивать j
    }
}

Если будете подавать на вход одной строкой 57585956, то scanf() воспримет это как 1 число.
В цикле проверяется введенное значение только if(i<256){. А если будет введен 0? Или 1? и т.д. Нужно проверять на код букв, или хотя бы печатных символов алфавита.

while (j<4) 
{
    scanf("%X",&i);
    if( i>65 && i<256 )
    {
→ Ссылка