char — c ++ ifstream конец строки

У меня есть файл, который выглядит так:

e r g d g d
f h d r h f
..........

И я хочу хранить эти символы в двумерном массиве

#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream file("file.txt");
char c[20][20];
int i = 0, j = 0;
while(!file.eof())
{
while(!end of line?)
{
file >> c[i][j];
j++;
}
i++;
}
.....
}

Как мне это сделать?
или как найти количество символов в строке?

-2

Решение

Вы не можете использовать eof() как ты. Вы должны выполнить операцию чтения ввода-вывода, прежде чем сможете использовать eof(),

Для того, что вы пытаетесь, вы должны использовать std::getline() вместо этого, например:

#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <algorithm>

int main()
{
std::ifstream file("file.txt");
std::string line;
char c[20][20] = {};

for (int i = 0; i < 20; ++i)
{
if (!std::getline(file, line))
break;

std::istringstream iss(line);
for(j = 0; j < 20; ++j)
{
if (!(iss >> c[i][j]))
break;
}
}

...

return 0;
}

При этом вы должны рассмотреть возможность использования std::vector вместо массивов фиксированного размера (если вы точно не знаете, что ваш файл будет никогда превышать 20 строк и / или 20 символов в строке):

#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <vector>

int main()
{
std::ifstream file("file.txt");
std::vector<std::vector<char> > c;
std::string line;

while (std::getline(file, line))
{
std::istringstream iss(line);
std::vector<char> tmp;

std::copy(
std::istream_iterator<char>(iss),
std::istream_iterator<char>(),
std::back_inserter(tmp)
);

/* which is equivalent to:
char ch;
while (iss >> ch) {
tmp.push_back(ch);
}
*/

c.push_back(tmp);
}

...

return 0;
}

В качестве альтернативы:

#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <vector>

typedef std::vector<char> CharVector;

std::istream& operator>>(std::istream &in, CharVector &out)
{
out.clear();

std::string line;
if (std::getline(in, line))
{
std::istringstream iss(line);

std::copy(
std::istream_iterator<char>(iss),
std::istream_iterator<char>(),
std::back_inserter(out)
);

/* which is equivalent to:
char ch;
while (iss >> ch) {
out.push_back(ch);
}
*/
}

return in;
}

int main()
{
std::ifstream file("file.txt");
std::vector<CharVector> c;

std::copy(
std::istream_iterator<CharVector>(file),
std::istream_iterator<CharVector>(),
std::back_inserter(c)
);

/* which is equivalent to:
CharVector cv;
while (file >> cv) {
c.push_back(cv);
}
*/

...

return 0;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]