我想制作一个程序,使用scanf()
从标准输入中读取一个数字列表(每行一个),并打印一个横图。
例如,我使用创建的数据文件:
./ p6
5:#####
40:####################################### 51:############################################## ###
...
26:########################## 46:##########################################
14:##############
这是我第一次尝试的代码:
int main ()
{
int i; //i is integer and s is symbol
char s = '#'; //s is a character with symbol should be converted
printf ("Enter an integer\n");
scanf ("%d", &i);
i = s; // i is an interger from input should be converted to s
printf ("%d: %d\n", i, s);
return 0;
}
输出:
Enter an integer
35: 35
我不明白为什么或如何?
请帮助我。
答案 0 :(得分:0)
之所以要打印35:35,是因为先将#复制到i,然后将s和i都打印为整数(%d)。 #在ascii中是35。
要打印字符的说明者是%c。
答案 1 :(得分:0)
简单的方法是从文件中读取数字(下面的示例读取stdin
),然后循环输出填充字符'#'
后跟换行符的次数。只要您从文件中读取有效的整数输入,便重复上述步骤。
一个简短的例子是:
#include <stdio.h>
#define FILL '#'
int main (void) {
int n;
while (scanf ("%d", &n) == 1) { /* for each valid input */
printf ("%2d: ", n); /* output the number n */
for (int i = 0; i < n; i++) /* loop n times */
putchar (FILL); /* outputting FILL char */
putchar ('\n'); /* tidy up with newline */
}
return 0;
}
使用/输出示例
$ echo "1 3 5 10 12 18 14 11 9 4 2" | ./bin/graphsideways
1: #
3: ###
5: #####
10: ##########
12: ############
18: ##################
14: ##############
11: ###########
9: #########
4: ####
2: ##
或输入您的电话号码:
$ echo "5 40 51 26 46 14" | ./bin/graphsideways
5: #####
40: ########################################
51: ###################################################
26: ##########################
46: ##############################################
14: ##############
您可以简单地添加FILE*
指针并打开(并确认文件已打开),然后再使用fscanf
而不是scanf
来读取文件。
如果您还有其他问题,请告诉我。
答案 2 :(得分:-1)
您需要某种循环才能打印出“#”
此外,您应该使用%c来打印字符
int main ()
{
int i; //i is integer and s is symbol
int x;
char s = '#'; //s is a character with symbol should be converted
printf ("Enter an integer\n");
scanf ("%d", &i);
printf ("%d: ", i);
for( x = 0; x < i; x = x + 1 ){
printf ("%c", s);
}
printf ("\n");
return 0;
}
[编辑以将%s替换为%c]