我正在尝试从终端读取文件。文件的第一行和第二行由行号和列组成。而其他行由矩阵字符内容组成。我能够读取第一行和第二行并存储它们的值,并相应地分配矩阵大小。但我无法弄清楚如何阅读剩下的部分。
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
ifstream f;
f.open(argv[1]);
int row, col;
f >> row;
f >> col;
char matrix[row][col];
char c;
int i = 0, j = 0;
while (!f.eof()) {
//TODO
}
f.close();
return 0;
}
EDIT1: 文件内容:
11
11
X XXXXXXXXX
X X X
X XXXXX X X
X X X X
XXXXX XXX X
X X X X
X X XX X X
X X X X
X XXXXXXX X
X X
XXXXXXXXXXX
答案 0 :(得分:2)
试试这个:
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
int main(int argc, char *argv[])
{
std::vector<std::string> v;
std::ifstream in(argv[1]);
std::string line;
int row, col;
in >> row >> col;
while (std::getline(in, line))
{
if (!line.empty())
v.push_back(line);
}
}
答案 1 :(得分:1)
您没有显示文件内容,因此我认为这应该有效:
int i,j;
for( i=0; i < row; ++i)
for( j=0; j < col; ++j)
f >> matrix[i][j] ;
如果文件具有以空格分隔的row*col
个字符
根据您更新的姿势,您还需要阅读空白区域 所以试试这个,
for( i=0; i < row; i++)
for( j=0; j < col; j++)
f >> std::noskipws >> matrix[i][j] ; // Don't skip white-space
我没有对此进行测试,但我认为您可能需要进行一些其他调整(可能会将行增加到12)。
同样要清除noskipws
标志使用f.unsetf(ios_base::skipws);