扫雷,但是输出的不对,代码也可以运行

sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵,他希望你帮他生成一个扫雷矩阵。
扫雷矩阵的每一行每一列都是一个数字,每个数字的含义是与当前位置相邻的8个方向中,有多少个雷(在下图中,雷用表示);如果当前位置就是雷的话,仍输出一个

#includeusing namespace std;int main(){ int n,m; cin>>n>>m; char l[n][m]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>l[i][j]; int b[n][m]={0}; int q,p,sum=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { sum=0; if(l[i][j]=='') { b[i][j]=-1; continue;} p=i-1,q=j-1,sum=0; for(;q<=j+1;q++) { if(l[p][q]=='') sum++; } for(p=i,q=j-1;q<=j+1;q++) { if(l[p][q]=='') sum++; } for(p=i+1,q=j-1;q<=j+1;q++) { if(l[p][q]=='') sum++; } b[i][j]=sum; } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(b[i][j]==-1) { cout<<"*"; continue;} cout<<b[i]; } cout<<endl;}}