C 读取魔术方形检查器的Console Row中的输入



我正在努力创建一个要求尺寸的应用程序,询问大小,一个正方形的输入(逐行),检查正方形是否是魔术正方形。

我的讲师要求逐行读取数据。我不确定在哪里弄乱了它。该函数仅读取Rownumber-1迭代,并分配了与输入不同的Magicsquare。

void Magic_Square::read_data(){
    char line[100];
    for(int i=0; i<rowNumber; i++){
        cin.getline(line,100, ' ');
        magicSquare.push_back(vector<int>());
        for(int j=0; j<rowNumber;j++){
            magicSquare[i].push_back((int)line[j]);
        }
   }
}

编辑:我找到了解决问题时简单的解决方案。这是代码:

void Magic_Square::read_data(){
    int a;
    for (int i=0; i<rowNumber; i++){
        magicSquare.push_back(vector<int>());
        for (int j=0; j<rowNumber; j++){
            cin>>a;
            magicSquare[i].push_back(a);
        }
    }
}

解决方案@fureeish提供的也可以很好地工作。非常感谢。

假设您的magicSquare是类型std::vector<std::vector<int>>,让我们看一下您的代码。

首先,我鼓励您使用std::string而不是char[],不仅是为了简单,而且出于安全原因。

其次,我无法从rowNumber的来源中推断出来,但我认为它是您Magic_suqre类的成员变量。

edit :此答案的先前版本是错误的,因为目前尚不清楚提供输入的方式。

现在我们知道了一切,我们就可以从一开始就开始了。由于我们正在处理由空格分开的行中提供的数字,因此我们可以使用std::stringstream提取它们。记住添加#include <sstream>#include <string>

void Magic_Square::read_data()
{
    std::string line;
    for(int i=0; i<rowNumber; i++){
        std::getline(std::cin, line);
        magicSquare.push_back(std::vector<int>());
        int tmp = 0;
        std::istringstream ss(line); // create a stringstream using line
        while(ss >> tmp) magicSquare[i].push_back(tmp);
        // for reach number in the line, put it into a newly added vector
    }
}

简要说明代码的工作原理 - 扫描输入行后,通过调用magicSquare.push_back(std::vector<int>())来启动新行,我们创建一个包含扫描的linestd::istringstream实例。在循环中,我们使用operator >>push_back()提取每个数字,该数字将您的新添加向量。

最新更新