为什么这段代码会产生无限循环

时间:2016-07-20 19:29:44

标签: c++ arrays char

我正在尝试测试许多用于扫雷游戏的测试用例 它导致infinte循环,我没有得到输出

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

int main(){
    int n,m;
    cin>>n>>m ;

    //cout<<"bug1";
    char grid[n+2][m+2] ;
    string numbers="0123456789" ;
    memset(grid,'0',sizeof grid);

    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin>>grid[i][j];

    //cout<<"bug2";


    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(grid[i][j]!='*'){
                int counter=0;
                for(int ii=i-1;ii<i+2;ii++){
                    for(int jj=j-1;j<j+2;jj++){
                        if(ii>=0 && jj>=0 && grid[ii][jj]=='*')
                            counter++;
                    }
                }
                grid[i][j]=numbers[counter];
            }
        }
    }

    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cout<<grid[i][j] ;
        }
        cout<<endl ;
    }


    return 0;
}

我试试这个测试用例

enter image description here

它导致infinte循环所以...解决方案是什么?

1 个答案:

答案 0 :(得分:6)

j<j+2 // in for(int jj=j-1;j<j+2;jj++){

始终为true,结果是无限循环。

考虑到您对变量的选择,使用realcounttotal变量是有意义的:

i,n,j,m,ii,jj // No wonder if someone is not confused with this.

仅举几例。