Проверка массива и возврат bool

Я учусь в классе CS и пытаюсь создать программу крестиков-ноликов. Я впервые использую функции, и мне нужна помощь в проверке 2-мерного массива, чтобы узнать, заполнен ли он символами «x» или «o». Я инициализировал, чтобы начать со всех элементов, равных '_', и мне нужно, чтобы возвращаемое значение было истиной или ложью, поэтому я использую #include <stdbool.h>. Вот функция:

bool check_table_full(char board[SIZE][SIZE]){

    if (board[0][0] == '_'){
       return false;
    }else if (board[1][0] == '_'){
       return false;
    }else if (board[2][0] == '_'){
       return false;
    }else if (board[0][1] == '_'){
       return false;
    }else if (board[1][1] == '_'){
       return false;
    }else if (board[2][1] == '_'){
       return false;
    }else if (board[0][2] == '_'){
       return false;
    }else if (board[1][2] == '_'){
       return false;
    }else if (board[2][2] == '_'){
       return false;
    }else{
        return true;
}

Я знаю, что есть лучшая оптимизация, чем использование оператора if else, но это просто в моей голове. Я использую printf("%s", check_table_full?"true":"false");, чтобы проверить, возвращает ли он false, как и должно, поскольку все элементы в массиве - это '_'. Независимо от того, что я делаю, он печатает true, и если я изменяю «true» в операторе printf, он печатает все, что находится внутри первой кавычки.

Все остальное работает так, как будто SIZE определен, массив определен, я просто не могу заставить эту функцию возвращать false.

Извините, если это слишком долго, я впервые задаю здесь вопрос.

Вы уверены, что инициализируете плату для всех '_'? Вы распечатали всю доску для проверки? Что такое SIZE?

yano 20.03.2018 23:48

Да, я распечатал весь массив, и все они являются подчеркиваниями, а РАЗМЕР определяется как 3, чтобы иметь доску 3 x 3

Luke 20.03.2018 23:49

Кстати, тело функции может быть return !std::memchr(&board, '_', 9);

M.M 21.03.2018 02:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
286
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ваш метод обхода матрицы не масштабируется, вы легко можете вносить ошибки и не слишком сложен. Мой «метод проверки» - это 2 строки кода для любого размера матрицы.

Вот как ты катишься ->

#include <stdio.h>
#include <stdbool.h>
#define MXSIZE 3
bool is_full(char *block) {
    for (int l=0;l<MXSIZE*MXSIZE;l++)if (*(block+l)=='_')return false;
    return true;
}
int main() {
    char my2DArray[MXSIZE][MXSIZE] = {{'O','O','O'},{'O','O','O'},{'O','O','_'}};
    printf("%s",is_full(&my2DArray[0][0])?"The array is full\n":"The array is not full\n");
    return 0;
}

(LOL .. голосование против.)

/ А

Ответ принят как подходящий

Если вы делаете printf("%s", check_table_full?"true":"false");, вы нет вызываете функцию.

check_table_full - это адрес функции. Вы хотите check_table_full()

Я просто набирал тот же ответ. Ты подтолкнул меня на это. :)

jyotesh 20.03.2018 23:52

Должен быть приведен аргумент, например check_table_full(board)

M.M 21.03.2018 02:30

Вы можете использовать вложенные циклы for. Я изучил синтаксис C++, а не синтаксис C, поэтому синтаксис может быть немного неправильным. Пример кода ...

#include <stdio.h>
int main() {
    char board[2][2];
    int outer_count, inner_count;
    //It will use nested for loops
    for (outer_count = 0; outer_count <= 2; count++) {
        for (inner_count = 0; inner_count <= 2; count ++) {
            if (board[outer_count][inner_count] == '_'){
                return false;
            }
        }
    }
    return True
}

Он помечен как c [не c++], поэтому string недоступен. Кроме того, ваша функция отваливается с конца без return, поэтому последняя строка должна быть return true;

Craig Estey 21.03.2018 00:15

Спасибо, Крейг. Я понятия не имел, что строка недоступна в C. Я отредактирую свой код, чтобы отразить это, поэтому, надеюсь, спрашивающий поймет, что я говорю.

Chuck Bartowski 21.03.2018 00:20

Другие вопросы по теме