我将让用户输入一个包含如下数据的文件:
numRows numCols x x x ... x x x x ... x . .. ...
现在我无法从这样的文件中读取数据。我不明白我应该怎么做才能从每一行读取每个整数。这就是我到目前为止所做的:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class my_exception : public std::exception {
virtual const char *what() const throw() {
return "Exception occurred!!";
}
};
int main() {
cout << "Enter the directory of the file: " << endl;
string path;
cin >> path;
ifstream infile;
cout << "You entered: " << path << endl;
infile.open(path.c_str());
string x;
try
{
if (infile.fail()) {
throw my_exception();
}
string line;
while (!infile.eof())
{
getline(infile, line);
cout << line << endl;
}
}
catch (const exception& e)
{
cout << e.what() << endl;
}
system("pause");
return 0;
}
我想要的是在每一行存储数据!这意味着在第一行之后我想将数据存储到相应的变量和每个单元格值中。
我很困惑如何获取每个整数并将它们存储在唯一的(numRows和numCols)变量中?
我想将文件的前两行分别保存到numRows
和numCols
,然后在每行之后,每个整数将是矩阵的单元格值。样本输入:
2 2 1 2 3 4
TIA
答案 0 :(得分:1)
试一试。第一行读入路径。然后,使用freopen
我们将提供的文件与stdin
相关联。所以现在我们可以直接使用cin
操作,就好像我们直接从stdin
读取一样,并且好像文件中的输入是键入行以进入控制台。
在此之后,我创建了与numRows
和numCols
对应的两个变量,并创建了此维度的矩阵。然后我创建一个嵌套的for循环来读入矩阵的每个值。
string path;
cin >> path;
freopen(path.c_str(),"r",stdin);
int numRows, numCols;
cin >> numRows >> numCols;
int matrix[numRows][numCols];
for(int i = 0; i < numRows; i++){
for(int j = 0; j < numCols; j++){
cin >> matrix[i][j];
}
}
或者,您可以使用它来创建矩阵
int** matrix = new int*[numRows];
for(int i = 0; i < numRows; i++)
matrix[i] = new int[numCols];
有关详情,请参阅this。