Подскажите где логика - C (СИ)
Формулировка задачи:
1. Вопрос собственно такой, мне уже Anitsirh помог найти альтернативу, но всё-таки кто знает, подскажите, почему не получается ?
Откомпилировав, после ввода символа вместо квадрата, например звёздочками, пустое пространство. Якобы fill напечатал не символами квадрат, а \n (предположение). Замена %c на %s ничего не даст, выкидует из программы после ввода символа
Если же после ввода стороны квадрата жать не Enter, а Ctrr+d(в линуксе типа конец ввода, я так понимаю), тогда всё работает. Квадрат символами печатается.
Если в scanf делать сразу два ввода - работает !
Если поменять местами ввод квадрата на ввод символа - тоже работает.
Так в чём же собственно проблема ? Мой код никак нельзя заставить работать так как я хочу ?
#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");
}
} printf("Enter simvol i storonu kvadrata: \n");
scanf("%c%d", &fill, &side); 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");
}
}
Объяснение кода листинга программы
- В программе имеется два пробела для ввода данных.
- Первый пробел для ввода длины стороны квадрата.
- Второй пробел для ввода символа, которым будет заполнен квадрат.
- Данные сохраняются в двух переменных:
side(длина стороны квадрата) иfill(символ заполнения). - Вызывается функция
print, которая принимает в качестве аргументов длину стороны и символ заполнения. - Внутри функции
printиспользуются два вложенных цикла для вывода символов заполнения на экран. - Внешний цикл выполняется от 1 до
side, а внутренний - от 1 доside. - На каждой итерации внутреннего цикла выводится символ заполнения с помощью
printf(%c, fill). - После каждой итерации внутреннего цикла вызывается
printf(\n), чтобы перейти на новую строку. - Функция
printзавершает работу после выполнения внутренних циклов. - Возвращаемое значение функции
printне используется. - В функции
mainпосле вызова функцииprintвозвращается 0, что означает успешный конец работы программы.