作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
总结:
1 - 带变量的结构
2——给变量赋值
3 - void 在文件中保存变量
4——把值改成变量
5 - void load values into variables <--- 这里我有问题
6 - 我显示值
我的问题是:我正在创建一个系统,用于使用代码块在 C++ 中保存和加载“游戏”。一个简单的代码用于创建有问题的系统,但也用于存储在 .txt 或 .dat 中的结构(几乎所有 int)中的变量的值。
#include<iostream>
#include<fstream>
using namespace std;
///GAME VAR
struct NewGame{
float tipo;
float health;
};
///SAVE_LOAD
void saveGame( NewGame G );
void loadGame( NewGame ( & G ) );
int main(){
///STRUCT
NewGame G;
///VALUE ASIGN (TEST)
cout << "Ingrese tipo [1] [2] [3]" << endl;
cin >> G.tipo;
cout << "Ingrese vida"<<endl;
cin >> G.health;
///SAVE STRUCT
saveGame( G );
///CHANGE VALUES
G.health = 0;
G.tipo = 0;
///LOAD STRUCT <-----HERE'S THE PROBLEM
loadGame( G );
///TEST VALUES
cout << "HEALTH: " << G.health << endl;
cout << "TYPE: " << G.tipo << endl;
return 0;
}
///SAVE
void saveGame( NewGame G){
ofstream s;
s.open("save.txt");
s << G.health << endl;
s << G.tipo << endl;
s.close();
};
///LOAD
void loadGame( NewGame ( & G ) ){
ifstream l;
l.open("save.txt");
l >> G.health;
l >> G.tipo;
l.close();
};
我已经试了好几种方法了,binary和txt的问题总是一样,保存数据,加载新游戏后测试数值,变量的数值没有恢复。
最佳答案
所以,我打算继续回答自己,只是对当前答案投赞成票,但我认为我需要解决当前答案没有解决的问题。
问题根本不在于 ifstream
。如果您看一下 loadGame()
中 G
的值,应该没问题:
///LOAD
void loadGame( NewGame G ){
ifstream l;
l.open("save.txt");
l >> G.health;
l >> G.tipo;
l.close();
// My additions: print the value of the variables stored in G
std::cout << "Health: " << G.health << "\n";
std::cout << "Tipo: " << G.tipo << "\n";
}
这应该有正确的值。如果是这样,那么您可以确定 ifstream
工作正常。那不是你的问题。
你的问题是你的参数是passed by value .这意味着 loadGame()
只处理传递给它的数据拷贝,不是原始数据。这实际上意味着 main()
无法访问 loadGame()
中的数据。
您有两个选择:一个是更改您的函数以返回一个 NewGame
(我将根据您的问题假设这不是一个选项,并且必须返回 void
出于某种原因)或者,两个,pass by reference :
///LOAD
void loadGame( NewGame& G ){ // a single & makes all the difference here
ifstream l;
l.open("save.txt");
l >> G.health;
l >> G.tipo;
l.close();
}
这将允许您从 main()
访问放在 G
中的值。
关于c++ - C++如何用void调用ifstream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57138182/
我是一名优秀的程序员,十分优秀!