Как мне работать с данной переменной внутри функции, основываясь на том, какая инструкция передана функции? - PullRequest
0 голосов
/ 22 декабря 2019

Используя C (работает на Arduino / Teensy) я могу читать символы из сетки в формате строки или столбца.

У меня есть вызов функции для разделения строк и столбцов, потому что я еще не смог сосредоточиться на изменении строки или столбцов в той же функции, в зависимости от того, какая инструкциябыло дано.

Кажется, что это просто и приятно - звонить findWordByCol() изнутри findWordByRow() (и наоборот), но я чувствую, что трачу код с функциями findWordOnRow() иfindWordOnCol().

РЕДАКТИРОВАТЬ: Новый пример.

Я попытался разыменовать операторы (*) и address-of (&) в нескольких точках этого небольшого примера. Но я не могу заставить Seril.println вывести то, что содержится в переменной row, исходя из того, что это выбранное слово из char words[][6] = {"row","col"};

void setup() {

    Serial.begin(9600);

    int chooseWord = 0;             // 0 - row, 1 - col

    char words[][6] = {"row","col"};

    char row[] = {"You chose the row."};
    char col[] = "You chose the col.";

    if (chooseWord == 0 ) {
        // I want you to print what is within variable row
        char toAlter = &words[0];
        Serial.println(toAlter);

        // Above should operate the same as 
        Serial.println(row);
    } else {
        // I want you to print what is within variable col
        //Serial.println(&words[1]);
    }


}

Как мне сделать что-то такое, чтоесли я вызываю одну функцию с помощью:

void findWord(basedOnRow) {};  // Should modify grid[**ROW**][col]
void findWord(basedOnCol) {};  // Should modify grid[row][**COL**]

Пример текущей операции. Начальный вызов:

// Find out where the second tile is relative to the first tile to set vector
if (vector == 0) {
                    findWordOnRow(workingWords, workingWord, stateHolder, row, col, tileCommsData.playerNumber);
} else if (vector == 1){
                    findWordOnCol(workingWords, workingWord, stateHolder, row, col, tileCommsData.playerNumber);
} else {
                    Serial.println("Something is wrong: No vector on this tile.");
}
void findWordOnRow (*pointers, things){

// Do things

  if ((gameGrid[row-1][col].designation != '\0' || gameGrid[row+1][col].designation != '\0') && (row >= 0 && row < GRID_Y)){                
    if (findWordOnCol(workingWords, workingWord, tileState, row, col, player) == 0) {
            allWordsComplete = 1;
        } else {
            allWordsComplete = 0;
        }
    }
}
void findWordOnCol (*pointers, things){

// Do things

  if ((gameGrid[row][col-1].designation != '\0' || gameGrid[row][col+1].designation != '\0') && (col >= 0 && col < GRID_X)){            
    if (findWordOnCol(workingWords, workingWord, tileState, row, col, player) == 0) {
            allWordsComplete = 1;
        } else {
            allWordsComplete = 0;
        }
    }
}

Я рассмотрел макросы - хотя не смог изменить свое мнение о том, как я изменил бы ## на строку или ## наcol в зависимости от ввода.

Отредактировано: Добавить язык и примеры. Спасибо JonRSharpe за указание, как я могу помочь вам помочь.

...