Подскажите где логика - C (СИ)

Узнай цену своей работы

Формулировка задачи:

1. Вопрос собственно такой, мне уже Anitsirh помог найти альтернативу, но всё-таки кто знает, подскажите, почему не получается ?
#include <stdio.h>
 
void print(int, char);
 
int main()
{
   int side;
   char fill;
 
   printf("Enter storonu kvadrata: \n");
   scanf("%d", &side);
   printf("Enter simvol kvadrata: \n");
   scanf("%c", &fill);
 
   print(side, fill);
 
   return 0;
}
 
void print(int side, char fill)
{
   int i, j;
 
   for (i = 1; i <= side; i++) {
      for (j = 1; j <= side; j++)
         printf("%c", fill);
            printf("\n");
  }
 
}
Откомпилировав, после ввода символа вместо квадрата, например звёздочками, пустое пространство. Якобы fill напечатал не символами квадрат, а \n (предположение). Замена %c на %s ничего не даст, выкидует из программы после ввода символа Если же после ввода стороны квадрата жать не Enter, а Ctrr+d(в линуксе типа конец ввода, я так понимаю), тогда всё работает. Квадрат символами печатается.
   printf("Enter simvol i storonu kvadrata: \n");
   scanf("%c%d", &fill, &side);
Если в scanf делать сразу два ввода - работает !
   printf("Enter simvol kvadrata: \n");
   scanf("%c", &fill);
   printf("Enter storonu kvadrata: \n");
   scanf("%d", &side);
Если поменять местами ввод квадрата на ввод символа - тоже работает. Так в чём же собственно проблема ? Мой код никак нельзя заставить работать так как я хочу ?

Решение задачи: «Подскажите где логика»

textual
Листинг программы
#include <stdio.h> 
void print(int, char);
int main()
{
   int side;
   char fill; 
   printf("Enter storonu kvadrata:\n");
   scanf("%d", &side);
   printf("Enter simvol kvadrata:\n");
//тут заменили %c на %s только эта замена во всем файле
   scanf("%s", &fill);
   print(side, fill);
   return 0;
}
void print(int side, char fill)
{
    int i, j;
    for (i = 1; i <= side; i++)
    {
      for (j = 1; j <= side; j++)
         printf("%c ", fill);
      printf("\n");
    }
}

Объяснение кода листинга программы

  1. В программе имеется два пробела для ввода данных.
  2. Первый пробел для ввода длины стороны квадрата.
  3. Второй пробел для ввода символа, которым будет заполнен квадрат.
  4. Данные сохраняются в двух переменных: side (длина стороны квадрата) и fill (символ заполнения).
  5. Вызывается функция print, которая принимает в качестве аргументов длину стороны и символ заполнения.
  6. Внутри функции print используются два вложенных цикла для вывода символов заполнения на экран.
  7. Внешний цикл выполняется от 1 до side, а внутренний - от 1 до side.
  8. На каждой итерации внутреннего цикла выводится символ заполнения с помощью printf(%c , fill).
  9. После каждой итерации внутреннего цикла вызывается printf(\n), чтобы перейти на новую строку.
  10. Функция print завершает работу после выполнения внутренних циклов.
  11. Возвращаемое значение функции print не используется.
  12. В функции main после вызова функции print возвращается 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.333 из 5