Ошибка в коде при использовании логического оператора '&&' несколько раз в c ++ - PullRequest
0 голосов
/ 20 февраля 2019

Я сделал следующий код для подсчета X в массиве.Вот ошибка комплимента, которую я получаю.

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;

    char s [n][n]  ;
    cin>>n; 
    char c ; 
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin >> c ;
            if(c=='X')
            {
                s[i][j]='X';
            }
        }

    } 

    int count=0; 

    for(int i=1;i<n-1;i++)
    {
        for(int j=1;j<n-1;j++)
        { 
            if( s[i][j]=='X' && s[i−1][j−1] =='X' && s[i−1][j+1]=='X'&& s[i+1][j−1] =='X' && s[i+1][j+1] =='X')      
                count++;
        }
    }

    cout<<count<<endl;
    return 0;
}

prog.cpp: В функции 'int main ()': prog.cpp: 23: 34: ошибка: ожидается ':' before ']'token {if (s [i] [j] ==' X '&& s [i? 1] [j? 1] ==' X '&& s [i? 1] [j + 1] ==' X'&& s [i + 1] [j? 1] ==' X '&& s [i + 1] [j + 1] ==' X ') ^

1 Ответ

0 голосов
/ 20 февраля 2019

Нет ничего плохого в логических 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...