Где моя ошибка?(Преобразование числовых баз) - PullRequest
0 голосов
/ 10 марта 2019

Моя программа читает число и преобразует его в другую базу. Он игнорирует все пробелы.

Я получаю неправильный ответ; однако это работает (не игнорируя пробелы), если я удаляю первый цикл while. Вот мой код для конвертации базы:

 while ((d = getchar()) == '\n' || d == ' ' || d == '   ') {

    }

 while (((d = getchar()) != EOF) && (d != '\n') && (d!= ' ') && (d!='   ')) {
    if (a<=10) {
        if ((d-'0')<0 || (d-'0')>=a) {
            printf("Invalid number!\n");
            return 0;
            }
        num = num*a + (d-'0');
        printf("%d\n", num);
        }

    else {
        if (d >= 48 && d<= 57) {
            num = num*a + (d-'0');
            printf("%d\n", num);
        }
        else if (d>=97 && d<a+87) {
            num = num*a + (d-87);
            printf("%d\n", num);
        }
        else if (d>=65 && d<a+55){
            num = num*a + (d-55);
            printf("%d\n", num);
        }
        else {
            printf("Invalid number!\n");
            return 0;
        }

    }
}

1 Ответ

1 голос
/ 10 марта 2019

Вы сожрали свою первую цифру с вашего номера.Используйте цикл do для повторного использования последнего хорошего чтения.

while ((d = getchar()) == '\n' || d == ' ' || d == '   ') {

}

if (d != EOF) do {
    /* ... */
} while (((d = getchar()) != EOF) && (d != '\n') && (d!= ' ') && (d!='   '));
...