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