读取数字,应视为符号

时间:2018-10-15 01:00:01

标签: c scanf symbols

我想制作一个程序,使用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

我不明白为什么或如何?

请帮助我。

3 个答案:

答案 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]