Читает число и должно учитываться как символ - PullRequest
0 голосов
/ 15 октября 2018

Я хочу создать программу, которая считывает список чисел (по одному в строке) из стандартного ввода, используя scanf() и печатает боковой график.

Например, я использовал свой файл данныхЯ создал:

. / P6

5: #####
40: ######################################## 51: ###################################################
...
26: ########################## 46: ##############################################
14: ##############

Вот мой код Iпопробовал в первый раз:

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 голосов
/ 15 октября 2018

Причина, по которой вы печатаете 35:35, заключается в том, что вы сначала копируете # в i, а затем печатаете s и i как целые числа (% d).# в ascii равно 35.

Спецификатор для печати символа -% c.

0 голосов
/ 15 октября 2018

Простой подход состоит в том, чтобы прочитать числа из вашего файла (пример ниже читает 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.

Дайте мне знать, если у вас есть дополнительные вопросы.

0 голосов
/ 15 октября 2018

Вам нужен какой-то цикл для распечатки '#'

Кроме того, вы должны использовать% 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 на%с]

...