#arrays #c #boolean
#массивы #c #логическое
Вопрос:
Всем доброго дня. Я работаю над этой проблемой Game of Life и пытаюсь передать массив логических значений: (дано)
game({0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 15, 9);
в приведенную ниже функцию: (задано)
void game(bool cells[], int size, int num_gen)
Однако я получаю эту ошибку: слишком много значений инициализатора C / C (146)
Я попытался поиграть и смог передать значения, объявив массив в основной функции:
int main(void)
{
int cells[]={0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
}
Но это мое школьное задание, поэтому я не должен редактировать какие-либо заданные коды / входные данные / функции.
Я немного потерялся, буду признателен за любые входные данные. Заранее спасибо!
Комментарии:
1. Но это мое школьное задание — на каком компьютерном языке должно быть написано это задание? Это C или C ?
2. Какую именно часть вам не разрешено редактировать? Потому что вам нужно будет изменить либо вызов, либо объявление
3. @PaulMcKenzie Технически это должно быть на C
4. @UnholySheep Были заданы как входные данные (тестовый пример), так и игровая функция. Поэтому мы не должны изменять их
5. Итак, вам был предоставлен код, который не компилируется, и предполагается, что он компилируется без каких-либо изменений? Это будет сложно
Ответ №1:
void game(bool cells[], int size, int num_gen)
Первый параметр вашей функции не является массивом. Конечно, вы объявили параметр как массив неопределенной длины, но такой параметр будет настроен как указатель на элемент такого массива. Параметр функции никогда не является массивом в C .
Таким образом, вы пытаетесь инициализировать указатель с помощью списка значений, заключенного в фигурные скобки. Существует более одного значения, поэтому это неправильно (и типы значений также несовместимы с указателем).
Вы можете создать массив и передать указатель на элемент этого массива:
int cells[]={0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
game(cells, std::size(cells), 9);
Ответ №2:
Список значений в фигурных скобках недопустим для выражения. Что вам нужно, так это составной литерал:
game((bool []){0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 15, 9);
Синтаксис, который выглядит как приведение перед разделенным сегментом, дает вам тип. Вы также можете использовать этот синтаксис для struct
литерала.
Комментарии:
1. Обратите внимание, что это только для C. В C нет составных литералов. Жаль, что у OP есть оба тега.
Ответ №3:
Для этого вы можете использовать составной литерал.
Что-то вроде
game((bool []){0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, 15, 9);
Комментарии:
1. Обратите внимание, что это только для C. В C нет составных литералов. Жаль, что у OP есть оба тега.
2. @Ruslan Ой, я виноват. Это должно быть на C, но я также хотел бы знать, что можно сделать, если это на C