我正在努力创建一个要求尺寸的应用程序,询问大小,一个正方形的输入(逐行),检查正方形是否是魔术正方形。
我的讲师要求逐行读取数据。我不确定在哪里弄乱了它。该函数仅读取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>())
来启动新行,我们创建一个包含扫描的line
的std::istringstream
实例。在循环中,我们使用operator >>
和push_back()
提取每个数字,该数字将您的新添加向量。