我已经完成以下代码来对数组中的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') ^
答案 0 :(得分:0)
if语句中的逻辑AND没有任何问题-除了不可读之外,还不错。问题出在其他地方。
using namespace std;
尽量避免使用这样的名称空间。这样可以防止名称冲突造成歧义。
char s[n][n];
这不是有效的C ++。它被称为VLA。在此答案here中了解有关此内容的更多信息。相反,请使用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++
此外,二维数组使用垃圾值初始化。
这我不得不承认,我不明白。如果仅当用户输入为“ 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