在c ++中多次使用逻辑运算符'&&'时发生代码错误

时间:2019-02-20 12:19:59

标签: c++ compiler-errors

我已经完成以下代码来对数组中的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:错误:在']'标记前应有预期的':'          {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 :(得分:0)

if语句中的逻辑AND没有任何问题-除了不可读之外,还不错。问题出在其他地方。

using namespace std;

尽量避免使用这样的名称空间。这样可以防止名称冲突造成歧义。

char s[n][n];

这不是有效的C ++。它被称为VLA。在此答案here中了解有关此内容的更多信息。相反,请使用constexprstd::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++

此外,二维数组使用垃圾值初始化。

这我不得不承认,我不明白。如果仅当用户输入为“ X”时才设置2D数组的元素,那么数组的其余部分将具有哪些值?

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语句还会返回正确的结果。 / p>

在此处查看演示的运行版本:https://rextester.com/ASQ26945