在c ++中用char读取文件char

时间:2013-11-17 12:59:21

标签: c++ matrix eof

我正在尝试从终端读取文件。文件的第一行和第二行由行号和列组成。而其他行由矩阵字符内容组成。我能够读取第一行和第二行并存储它们的值,并相应地分配矩阵大小。但我无法弄清楚如何阅读剩下的部分。

  #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

2 个答案:

答案 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);