あなたeof()
のように使うことはできません。を使用する前に、I/O 読み取り操作を実行する必要があります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 行および/または 1 行あたり 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;
}