如何调试错误“'fout'未在此范围内声明”

时间:2016-04-24 10:20:01

标签: c++

我需要做以下事情:

  

被认为是大小nxn的棋盘,他们愿意有障碍。需要打印移动狂人所需的最小移动次数,遵守国际象棋规则并避开障碍,从初始位置到最终位置。据信傻瓜的初始和最终位置没有障碍。

这是我的代码:

#include <fstream>
using namespace std;
#define INF 9999

int a[100][100];
int c[100][100];
int ip, jp, is, js;
int i,j;
int m, n;
const int di[] = { -1, 0, 1, 0 },
    dj[] = { 0, 1, 0, -1 };

bool OK( int i, int j );
void Lee();
void Write();
void Read();

int main()
 {
    Read();
    Lee();
    Write();

    return 0;
     }

  void Read()
    {
    ifstream fin("lee.in");
    fin >> n >> m;
    fin >> ip >> jp >> is >> js;
    for ( int i = 0; i < n; i++ )
            for ( int j = 0; j < m; j++ )
            {
                    fin >> a[i][j];
                    c[i][j] = INF;
            }
    fin.close();
      }

      bool OK()
       {
      if ( a[i][j] == 1 ){ return false;} // obstacol, marcat de cifra 1 aici.
    if ( i < 0 || j < 0 || i >= n || j >= m ){}
            return false; // in afara matricei
    return true;  // niciuna din conditiile de mai sus nu au fost adevarate.
             }

    void Lee()
       {
    c[ip][jp] = 0; // punctul de plecare. distanta pana la el fiind de 0.
    bool modif;
    int pas = 0; // numarul de pasi efectuati.
    do
    {
            modif = false;
            for ( int i = 0; i < n; i++ )
                            for ( int j = 0; j < m; j++ )
                                    if ( c[i][j] == pas ) 
                              for ( int d = 0; d < 4; ++d )
                                            {

                                                    int iv = i + di[d];
                                                    int jv = j + dj[d];
                                                    if ( OK( iv, jv) )
                                                    {
                  c[iv][jv] = pas + 1;
                                                            modif = true;
          if ( iv == is && jv == js ) 
                                                                    return;
                                                    }
                                            }
                   pas++;
            } while ( modif );
              }

                void Write()
                  {
    for ( int i = 0; i < n; i++ )
    {
            for ( int j = 0; j < m; j++ )
                            fout << c[i][j] << ' ';
            fout << '\n';
    }
    fout >> c[is][js];


            }

我有3个错误“'fout'未在此范围内声明”,我不知道是什么原因。

2 个答案:

答案 0 :(得分:3)

在代码中的适当位置使用ofstream fout(filename);声明fout。

答案 1 :(得分:0)

if ( i < 0 || j < 0 || i >= n || j >= m ){}
     return false; // in afara matricei
return true;  // niciuna din conditiile de mai sus nu au fost adevarate.

当条件为真时,if会执行{},因此return false始终执行。

删除if

末尾的大括号