C++ c++;ifstream行的末尾

C++ c++;ifstream行的末尾,c++,char,fstream,end-of-line,C++,Char,Fstream,End Of Line,我有一个文件如下所示: 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())

我有一个文件如下所示:

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++;
    }
.....
}        
#包括
#包括
使用名称空间std;
int main()
{
ifstream文件(“file.txt”);
字符c[20][20];
int i=0,j=0;
而(!file.eof())
{
而(!行尾?)
{
文件>>c[i][j];
j++;
}
i++;
}
.....
}        
我该怎么做
或者如何查找一行中的字符数?

您不能像您那样使用
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;
}
或者:

#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
typedef std::vector CharVector;
std::istream&operator>>(std::istream&输入、CharVector&输出)
{
out.clear();
std::字符串行;
if(std::getline(in,line))
{
标准::istringstream iss(线);
复制(
std::istream_迭代器(iss),
std::istream_迭代器(),
标准:背向插入器(输出)
);
/*这相当于:
char ch;
while(iss>>ch){
向外。向后推(ch);
}
*/
}
返回;
}
int main()
{
std::ifstream文件(“file.txt”);
std::向量c;
复制(
std::istream_迭代器(文件),
std::istream_迭代器(),
标准:背向插入器(c)
);
/*这相当于:
CharVector cv;
while(文件>>cv){
c、 推回(cv);
}
*/
...
返回0;
}

char
不是二维数组每行的字符数是否相同?@tobi303我修正了它为什么在每行仅包含6个字符时使用
char[20][20]
呢?你刚才说每行的字符数始终相同。。。。
#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;
}