Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迷宫程序中的字符串下标错误_C++_String_Vector_Subscript_File Io - Fatal编程技术网

C++ 迷宫程序中的字符串下标错误

C++ 迷宫程序中的字符串下标错误,c++,string,vector,subscript,file-io,C++,String,Vector,Subscript,File Io,我需要为类创建一个程序,将迷宫文件输入到二维向量中,这样计算机就可以将向量返回到类迷宫中。我目前正在开发一个函数,将迷宫输入加载到向量中。每次我运行程序时,它都会在第一个条件语句处停止,该语句用于检查每一行是否相等。它会出现错误,然后从MVS studio获得中止错误,表示字符串下标超出范围。我一直在网上搜索可能的错误,但没有任何帮助。有人能告诉我我做错了什么吗 代码如下: #include <iostream> #include <string> #include &l

我需要为类创建一个程序,将迷宫文件输入到二维向量中,这样计算机就可以将向量返回到类迷宫中。我目前正在开发一个函数,将迷宫输入加载到向量中。每次我运行程序时,它都会在第一个条件语句处停止,该语句用于检查每一行是否相等。它会出现错误,然后从MVS studio获得中止错误,表示字符串下标超出范围。我一直在网上搜索可能的错误,但没有任何帮助。有人能告诉我我做错了什么吗

代码如下:

#include <iostream>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

struct Location  {
    friend std::ostream &operator <<(std::ostream &os, const Location &location) {
        os << "(" << location.x << ", " << location.y << ")";
        return os;
    }
    //bool operator ==(const Location &rhs) const {return x == rhs.x && y == rhs.y;}
    //bool operator !=(const Location &rhs) const {return !(*this == rhs);}
    //operator bool() const {return x >= 0;}
    Location(int x=-1, int y=-1) : x(x), y(y) {}
    int x, y;
};

int main()
{

    ifstream infile;
    infile.open("Maze.txt");

    vector<vector<bool> > mazeSpec;   //row vector
    vector<bool> column;
    string top,currlin;
    int row=0, col=0;
    Location start, finish;

    getline(infile, top);
    int size= top.length();
    for(int i=0; i<size; i++){
        column.push_back(false);
    }
    cout<<top<<endl;
    cout<<top.length();
    //getline(infile,currlin);
    //cout<<(currlin);
    //cout<<currlin.length();

    mazeSpec.push_back(column);
    column.clear();
    row++;

    while (getline(infile,currlin)){

        for(int i=0; i<size; i++){

            if ((currlin.length()) != size){
                    //throw "Error! Line of Maze is too short!"; //check to see if rows of equal length
                cout<<"Error!";}
                    //break;}

            else if (currlin[i] == 'S'){
                    column.push_back(true);
                    start= (row, i);}

            else if (currlin[i] == 'F'){
                    column.push_back(true);
                    finish= (row, i);}

            else if (currlin[i] == ' ' || '+' || '|'){
                    column.push_back(false);
            }

            else if(currlin[i]== '*'){
                column.push_back(true);}
        }
            row++;
            currlin.empty();
            mazeSpec.push_back(column);
            column.clear();
    }





    infile.close();

    int x;
    cin>>x;
    cin.ignore();

    return 0;
}

谢谢

所以我只是在while循环开始之后,在我得到错误消息之前,放了一个print语句,它显示getline正在读取整个迷宫,而不是一行,所以数组超出了界限。如何修复它,使getline可以一直读取到行的末尾,我尝试将“\n”添加到getline,但也没有任何帮助。如果每一行都由换行符分隔,则getline不应该读取整个迷宫。你确定吗?是的,我知道这就是为什么我不能找出错误的原因,实际上它逐行读取,但在读取下一行之前,它从未像预期的那样进入forloop。如果使用返回流作为条件,我真的不知道它是如何计算的。您可以尝试在while中检查流的eof标志。
+----------------------------------------+
|*                           F           |
|*      ***** *********      *           |
|****   *   * *       *      *           |
|   *   *   * *       ********           |
| ***   *   * *       *  *               |
| *     *   * *       *  *               |
| *******   * *       *                  |
|   *    **** *       *   *         *****|
|   *    *    *       *   *             *|
|   *    ******       ********          *|
|   *                        *          *|
|   S                 *******************|
+----------------------------------------+