如何使用scanf函数在输入的数字之间添加(*)?

时间:2019-04-02 19:18:17

标签: c

在所有图形之间使用scanf函数输入的数字应*与图形值一样多。

示例输出

请输入整数:1324

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

3 个答案:

答案 0 :(得分:0)

您可以将输入作为字符串,并为字符串的每个字符(假设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("*");
        }
    }
}

更新:

如果只想使用整数,可以这样:

#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("*");
        }
    }
}

答案 1 :(得分:0)

使用%1d一次可以输入一位数字。
使用%c获取下一个字符以查看它是否为换行符。如果不是,请使用ungetc替换输入流中的字符。
%.*s将接受要打印的字符数的参数,并打印value*的字符数。

#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;
}

答案 2 :(得分:0)

这是一个字符串和一个整数(使用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