Как разделить число с пробелами между ними, используя цикл while и функцию power - PullRequest
0 голосов
/ 08 февраля 2019

Как разделить число с 5 пробелами между числами, не меняя число, используя цикл while и функцию pow?

Пользователь может ввести любое количество чисел.Примером не ограничивается только 3.

Пользователю будет предложено ввести n-количество чисел.Пользователю будет предложено ввести цифры.Распечатайте числа без использования массивов, а только с основными функциями while и pow.

Надеюсь, что получу некоторую помощь, спасибо!

Я пробовал, но ниже мой результат

Пожалуйста, введите номер цифры: 3
Пожалуйста, введите 3-значный номер: 123

Выход:

3 2 1

Ожидаемый результат:

1 2 3

int num;
int digit;
// int final;
int n;
int counter;

printf("Number of digits: ");
scanf("%d", &num);

printf("\nDigit number: ", num);
scanf("%d", &n);
counter = 0;

while (counter < n) {
    digit = n % 10;
    n = n / 10;
    counter++;
    printf("%d   ", digit);
}

1 Ответ

0 голосов
/ 09 февраля 2019

Используйте спецификатор %n, чтобы подтвердить, что введено требуемое количество цифр.При int это может быть около 10 цифр.
Поскольку первая попытка дала обратный результат, дважды измените число, чтобы получить желаемый результат.
Обратите внимание на такие входы, как 1000 и 0001для печати правильных начальных и конечных нулей.
Проверьте возвращение scanf, вход abc не может быть проанализирован как целое число, а scanf вернет ноль.scanf возвращает количество проверенных элементов.

#include <stdio.h>

int main( void) {
    int num = 0;
    int digits = 0;
    int digit = 0;
    int zeros = 0;
    int temp = 0;
    int reverse = 0;
    int counter = 0;
    int start = 0;
    int stop = 0;

    printf("Number of digits: ");
    fflush ( stdout);
    if ( 1 == scanf("%d", &digits)) {

        printf("\nDigit number: ");
        fflush ( stdout);
        if ( 1 == scanf(" %n%d%n", &start, &num, &stop)) {
            if ( digits != stop - start) {
                fprintf ( stderr, "enter %d digit number\n", digits);
                return 0;
            }
            counter = 0;
            temp = num;
            zeros = digits;
            while (temp) {//reverse number
                reverse *= 10;
                reverse += temp % 10;
                temp = temp / 10;
                zeros--;//deduct for leading zeros
            }
            counter = 0;
            while ( zeros) {//print leading zeros
                counter++;
                zeros--;
                printf ( "0  ");
            }
            while (counter < digits) {//reverse again and print
                digit = reverse % 10;
                reverse = reverse / 10;
                counter++;
                printf("%d   ", digit);
            }
            printf("\n");
        }
        else {
            fprintf ( stderr, "could not parse number\n");
            return 0;
        }
    }
    else {
        fprintf ( stderr, "could not parse number of digits\n");
        return 0;
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...