(C++)我创建了一个函数来打开文本文件并将内容分配给数组。数组中的前2个元素是网格的大小。但是,如果前两个数字中的一个或两个都是两位数,则不会将其读为两位数。有什么办法吗?
int openMap()
{
std::string fileName;
std::cout << "Please enter the file name with extension that you want to open: ";
std::cin >> fileName;
system("CLS");
std::ifstream file(fileName); //OPENS MAP FILE
int tmp;
int i = 0;
if (!file.is_open()) //CHECKS IF THE MAP FILE HAS OPENED CORRECTLY
{
std::cout << "Error Occured!\nCould not open file.";
return 0;
}
while (!file.eof()) //READS THE MAP FILE AND PASSES THE INFORMATION INTO AN ARRAY
{
file >> tmp;
checkNumber(tmp);
if (valid == true) //IF THE CHARACTER IS NOT A NUMBER THEN IT WONT BE PASSED INTO THE ARRAY
{
tmpArray[i] = tmp;
i++;
valid = false;
}
row = tmpArray[1]; //ASSIGNS THE FIRST 2 NUMBERS OF THE MAP FILE TO ROW AND COL VARIABLES
col = tmpArray[0];
}
return row, col;
}
我认为我必须重写
file >> tmp
以某种不同的方式,但不确定如何。
有没有一种方法可以扫描文本文件,直到遇到空白?
文本文件内容如下所示
(6或4或两者都可以是两位数)
编辑:
for (int j = 0; j < row; j++)
{
for (int k = 0; k < col; k++)
{
_map[j][k] = tmpArray[l];
std::cout << _map[j][k] << " ";
l++;
}
}
最佳答案
代码中有很多错误,您可能应该使用调试器来逐步检查并确定程序的哪些部分工作异常。
while(!file.eof())
file >> tmp;
checkNumber(tmp);
if (valid == true) //IF THE CHARACTER IS NOT A NUMBER THEN IT WONT BE PASSED INTO THE ARRAY
{
tmpArray[i] = tmp;
i++;
valid = false;
}
row = tmpArray[1]; //ASSIGNS THE FIRST 2 NUMBERS OF THE MAP FILE TO ROW AND COL VARIABLES
col = tmpArray[0];
您需要在循环的每个迭代中设置
row=tmpArray[1]
和col = tmpArray[0]
,这不仅是不必要的,而且是不正确的,尤其是因为在i=0
中没有放置任何内容时,在tmpArray[1]
上正在执行row = tmpArray [1]。编辑:这更小,由于较少的变量和类型转换而导致的错误较少,并且更易于阅读:
int row,col;
//Add error checking here
cin >> col;
cin >> row;
cout << "Cols: " << col << " Rows: " << row << endl;
vector<vector<int> >_map(row, vector<int>(col,0));
for(int j=0; j < row; j++)
{
for(int k=0; k < col; k++)
{
int tmp;
cin >> tmp;
//Add error checking for tmp
_map[j][k] = tmp;
cout << _map[j][k] << endl;
}
}