2016-03-07 3 views
0

Я пытаюсь проверить, соответствует ли пользовательский ввод определенному значению в многомерном массиве char. Но я не могу понять, как это сделать. Пользовательский ввод будет числом от 1 до 9. Я буду зацикливаться на моем массиве, чтобы найти подходящее значение. Мой код выглядит следующим образом:проверка значений в многомерном массиве char, cpp

char input; 
getline(cin,input); 
char gameBoard[3][3] = {{'1','2','3'}, 
         {'4','5','6'}, 
         {'7','8','9'} 
         }; 
for(int i=0; i<3; i++) 
{ 
    for(int j=0; j<3; j++) 
    { 
     gameBoard[i][j]; //SOME CODE TO COMPARE THE VALUE TO USER INPUT 
    } 
} 

Я попытался использовать strcmp, но могу сделать это только для одномерного массива.

Я также попытался преобразования значения обугленного в ряд по atoi, но я получаю сообщение об ошибке,

error: invalid conversion from 'char' to 'const char*' [-fpermissive]| 

Любые предложения о том, как сравнить будут оценены. Благодаря

+0

Я считаю по крайней мере три или четыре вещи, которые ошибочны в этом вопросе. Мне кажется, что вы слишком быстро, с этим C++. Прежде чем приступить к решению довольно сложной логики в этой проблеме, мне кажется, что вам нужно вернуться и потратить больше времени на изучение основ. Как то, что это char, что такое std :: string и какой из них используется std :: getline. В чем разница между символом и целым числом и т. Д. Если у вас все еще нет четкого понимания этих основ, попытка кодирования такой проблемы будет практически невозможна. –

+1

Устойчивое обращение с пользовательским входом, как известно, затруднено. Вы можете использовать 'geline()', но вам нужна строка 'std :: string' для него как второй аргумент. Если вы полагаетесь на то, что пользователь вводит только один символ (число) в строке, тест просто является 'string s; getline (cin, s); if (s [0] == gameBoard [i] [j]) ... ' –

+0

@SamVarshavchik отметил. Спасибо –

ответ

1

Как насчет:

if (gameBoard[i][j] == input) {... } 
+1

Я думаю, что ОР нуждается в совете о том, как получить «вход». –

+0

да это работает спасибо. Я слишком старался, наверное. –

+0

@SafwanUllKarim Если вам также интересно, как получить 'input',' cin.get (input), 'должен работать. – Lincoln

0

strcmp ожидает нулевой строку завершающуюся, а не символ. Если вам нужно сравнить с нулевым завершённой строкой str, является ли один символом c, вы можете использовать

(str[0] == c) && (str[1] == '\0') 

В вашем случае

if ((input[0] == gameBoard[i][j]) && (input[1] == '\0')) { /* ... */ } 

«\ 0» является нулевым терминатором строки. Важно проверить str[0] до str[1], потому что str может быть пустым (то есть str[0] == '\0'), а при чтении за конец строки (например, от str[1]) может произойти сбой вашей программы.

+0

Спасибо @jotik –

Смежные вопросы