Нет ничего плохого в логических AND в операторе if - ну, кроме того, что они не читаются.Проблема повсюду.
using namespace std;
Старайтесь избегать использования таких пространств имен.Это сделано для предотвращения неоднозначности при столкновении имен.
char s[n][n];
Это недопустимо в C ++.Это известно как VLA.Подробнее об этом в этом ответе здесь .Вместо этого используйте constexpr
или динамический массив, например std::vector
.
int n;
char s[n][n];
cin>>n;
. Поскольку n
является локальной переменной, она определяется с использованием значений мусора (193446 или -539646 или...).Это означает, что вы можете получить массив негативных пространств в формате 2D ???Только после этого n
устанавливается на число из пользовательского ввода.Предполагая, что VLA не являются проблемой, вы должны сделать следующее:
int n = 0;
cin>>n;
char s[n][n]; //still not valid C++
Кроме того, 2D-массив инициализируется со значениями мусора.
Это, я должен признать, яне понимают.Если элементы двумерного массива установлены только тогда, когда пользовательский ввод имеет значение «X», то какие значения будет иметь остальная часть массива?
cin >> c ;
if(c=='X')
{
s[i][j]='X';
}
Вы просто хотите заполнить массив пользователемвходные значения?Если это так, то все, что вам нужно, это следующее:
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
std::cin >> s[i][j];
И, наконец, программа считает шаблоны X, где X должен находиться на всех четырех углах другого X. Помимо того факта, что наличие длинного if-Заявления - плохая практика, оператор if будет возвращать правильный результат.
См. текущую версию демо здесь: https://rextester.com/ASQ26945