在所有图形之间使用scanf函数输入的数字应*与图形值一样多。
示例输出
请输入整数:1324
1 * 3 *** 2 ** 4 ****
答案 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;
}