我有一个程序将一些字符串和整数放在一个结构中。 现在我想这样做,如果打开程序,它会从文件中获取所有信息,如果程序关闭,我想将所有信息保存到同一个文件中,以便下次可以找到它。
使用一个文件将每个变量放入一个文件或每个变量的单独文件中,最好的方法是什么?
如果我已经弄明白了,我需要知道如何找到特定的行,而不是从那里读取信息。 (比如第59行的名称在结构数组中排在第59位。), 然后我必须覆盖某些信息,比如玩过的游戏数量以及赢得,丢失或绑定的游戏数量。 (这是一个小游戏。)
这是结构:
struct Recgame{
char name[20];
char surname[20];
int games; //needs to be overwritable in file
int won; //needs to be overwritable in file
int same; //needs to be overwritable in file
int lost; //needs to be overwritable in file
int place; //needs to be overwritable in file
int money; //needs to be overwritable in file
} info[100];
答案 0 :(得分:2)
C ++方法是为结构Recgame编写流插入器和流提取器。 原型是:
std::ostream& operator<<( std::ostream& out, const Recgame& recgame );
std::istream& operator>>( std::istream& in, Recgame& recgame );
在此之后,您可以轻松地将信息写入文件
ofstream file("afile.txt");
for( int i=0; i<n; ++i ) // n should be the number of the objects
file << info[i];
写作的实施可能是:
std::ostream& operator<<( std::ostream& out, const Recgame& recgame )
{
// make sure, that the char-arrays contain a closing char(0) -> ends
out << recgame.name << "\n";
out << recgame.surname << "\n";
out << recgame.games << " " << recgame.won << " " << recgame.same << " " <<
recgame.lost << " " << recgame.place << " " << recgame.money << "\n";
return out;
}
读取提取器的实现
std::istream& operator>>( std::istream& in, Recgame& recgame )
{
in >> std::skipws; // skip leading spaces
in.getline( recgame.name, 20 ).ignore( std::numeric_limits< std::streamsize >::max(), '\n' ); // requires #include <limits>
in.getline( recgame.surname, 20 ).ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
in >> recgame.games >> recgame.won >> recgame.same >>
recgame.lost >> recgame.place >> recgame.money;
return in;
}
从文件中读取:
ifstream file("afile.txt");
int n = 0; // number of read objects
for( ; n < N && file >> info[n]; ++n ) // -> const int N = 100;
;
if( file.eof() )
cout << "Ok - read until end of file\n";
cout << "read " << n << " objects" << endl;
答案 1 :(得分:0)
您可以在C中使用fwrite
函数在二进制文件中编写结构,并使用fread
再次读取它。
如果要使用C ++样式文件I / O,则需要重载<<
和>>
运算符。