как я могу добавить (*) между введенными числами с помощью функции scanf? - PullRequest
0 голосов
/ 02 апреля 2019

число, которое вводится с помощью функции scanf, между всеми цифрами должно быть введено * столько же, сколько значение цифры.

пример вывода

Пожалуйста, введите целое число: 1324

1 * 3 *** 2 ** 4 ****

Ответы [ 3 ]

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

Ввод можно принимать по одной цифре за раз с %1d.
Получите следующий символ, используя %c, чтобы увидеть, является ли он новой строкой. Если нет, используйте ungetc для замены символа во входном потоке.
%.*s примет аргумент количества символов для печати и напечатает value number of *.

#include <stdio.h>

int main( void) {
    char stars[] = "**********";
    char ch = 0;
    int value = 0;

    printf ( "enter number\n");
    while ( 1 == scanf ( "%1d", &value)) {
        printf ( "%d%.*s", value, value, stars);
        if ( 1 == scanf ( "%c", &ch) && '\n' != ch) {
            ungetc ( ch, stdin);
        }
        else {
            break;
        }
    }
    printf ( "\n");

    return 0;
}

со входом 3256w это работает без символа

#include <stdio.h>

int main( void) {
    int value = 0;

    printf ( "enter number\n");
    while ( 1 == scanf ( "%1d", &value)) {
        printf ( "%d", value);
        while ( value) {
            value--;
            printf ( "*");
        }
        fflush ( stdout);
    }
    printf ( "\n");

    return 0;
}
0 голосов
/ 02 апреля 2019

Вот и строка, и целочисленная (с использованием atoi()) реализация

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

void sprint(const char *i) {
    while (isdigit((unsigned char)*i)) {
        putchar(*i);
        for (int k = 0; k < *i - '0'; k++) putchar('*');
        i++;
    }
}

void iprint(int i) {
    if (i > 9) iprint(i/10);
    putchar(i % 10 + '0');
    for (int k = 0; k < i % 10; k++) putchar('*');
}

int main(void) {
    char in[99];
    while (fgets(in, 99, stdin)) {
        sprint(in);
        printf(" ---- ");
        iprint(atoi(in));
        printf("\n");
    }
    return 0;
}

См. https://ideone.com/vFY1I8

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

Вы можете принять ввод как строку и для каждого символа строки (предположим, s [i]) вывести * символ, s[i]-'0' раз . См. Реализацию ниже для лучшего понимания.

#include <stdio.h>
#include <string.h>

int main()
{
    char s[100000];
    printf("Please enter an integer:");
    scanf("%s", s);
    int len = strlen(s);
    int i, j;
    for(i = 0; i < len; i++){
        printf("%c", s[i]);
        for(j = 0; j < s[i]-'0'; j++){
            printf("*");
        }
    }
}

UPDATE:

Если вы хотите сделать это только с помощью целого числа, вы можете сделать это следующим образом:

#include <stdio.h>

int main()
{
    int n, m, a, i;
    printf("Please enter an integer:");
    scanf("%d", &n);

    m = 1;
    while(m < n){
        m *= 10;
    }
    m /= 10;
    while(n != 0){
        a = n/m;
        n %= m;
        m /= 10;
        printf("%d", a);
        for(i = 0; i < a; i++){
            printf("*");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...