(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;
    }
}

10-04 23:32