gpt4 book ai didi

c++ - 文件存储和检索

转载 作者:行者123 更新时间:2023-11-28 03:15:19 25 4
gpt4 key购买 nike

我是一名高中生,爱好是编程。我制作免费的东西,并且正在使用 opengl 开发游戏。我需要保存和加载数据,但遇到困难时,我做了以下测试我的方法。

保存文件“shiptest”是正确的,但是当我打开第二个文件“shipout”时,它是用“shiptest”的保存数据创建的,只有第一行在那里。起初我以为我的数组没有加载任何新数据并且 clear 函数没有删除第一个元素。我通过在保存数据后覆盖这些行并观察到保存的行最终被加载来纠正了这个假设。我的新假设是 getline 函数每次调用时只获取第一行;但我不知道如何解决这个问题。

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>

unsigned short int shipPart;

float editShip[256][3];//part ID, x relative, y relative, r,g,b
float activeShip[256][3];

void CLEAR(bool edit)
{
for (int n = 0; n < 256; n++)
{
if (edit)
editShip[n][0] = -1;
else
activeShip[n][0] = -1;
}
}

void saveEdit(std::string name)
{
std::ofstream out;
out.open ("ship" + name + ".txt", std::ofstream::out);

for (int n = 0; n < 256; n++)
{
for (int i = 0; i < 3; i++)
{
if (editShip[n][0] == -1)
break;
out << editShip[n][i] << " ";
}
out << "\n";
}

out.close();
}

void load(std::string name, bool edit)
{
CLEAR(edit);
std::ifstream in;
in.open ("ship" + name + ".txt", std::ifstream::in);
std::string line, buf;
std::stringstream ss;
int i;
for (int n = 0; n < 3; n++)
{
getline(in, line);
ss << line;
i=0;
while (ss >> buf)
{
if (edit)
editShip[n][i] = atof(buf.c_str());
else
activeShip[n][i] = atof(buf.c_str());
i++;
}
}
in.close();
}

int main()
{
for (int n = 0; n < 256; n++)
{
editShip[n][0] = -1;
activeShip[n][0] = -1;
}

editShip[0][0] = 5;
editShip[0][1] = .11;
editShip[0][2] = .22;
editShip[1][0] = 4;
editShip[1][1] = .33;
editShip[1][2] = .44;
editShip[2][0] = 3;
editShip[2][1] = .55;
editShip[2][2] = .66;

saveEdit("test");

editShip[0][0] = 5000;
editShip[0][1] = 8978;
editShip[0][2] = 8888;

load("test",1);

saveEdit("out");

std::cout << "Hello world!" << std::endl;
return 0;
}

最佳答案

load() 中,您不断向 stringstream ss 添加更多行,但它的 eof 标志可能在上一次循环中保持设置状态,因此即使从中可以读取更多内容,eof 已设置,因此它不会继续通过 operator>>() 提供数据。如果您只是在 for() 循环的顶部调用 ss.clear(),您将从每个空的 stringstream 开始循环,我想你会得到你想要的。

关于c++ - 文件存储和检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17098087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com