使用fscanf在不同的类中设置变量
Using fscanf to set a variable in a different class
我试图从文件中读取一个数字,并将其设置为不同类中的公共变量。读取文件的函数有一个该类的指针对象实例。我遇到了一个奇怪的问题:
以下作品:
int dummy;
fscanf(file,"%d",&dummy); // assume the file stores the number 10
globals->var = dummy;
cout << "variable is " << globals->var << endl; // this outputs 10 to console. great!
但是我要做很多fscanf
,我不想创建所有这些多余的dummy
变量。我尝试了以下操作:
fscanf(file,"%d",&globals->var);
cout << "variable is " << globals->var << endl; // this outputs 2.9e-321 (aka junk)
有一个不工作的原因吗?我需要像globals->&var
这样做吗,或者其他类似的变化?我试着把它包在括号里,像这样:&(globals->var)
,但这也不起作用。有什么原因导致这个不工作(没有我粘贴很多很多行代码)
谢谢!
正如你在评论中所说,var
的类型是double。是的,这就是问题所在。你应该使用%f
。
除此之外,我想给你一个建议:
更倾向于使用c++流进行I/O工作。他们是类型安全的。如果你使用它们,你就不会遇到fprintf
遇到的问题。
你应该这样使用它:
std::ifstream file("filename.txt");
file >> globals->var; //don't worry about whether var is int, or double!
很酷,不是吗? 问题很可能是全局变量->var是float
或double
将其转换为int
或其他整数类型,它应该工作
输出"垃圾"的原因是float
/double
数字以一种特殊的方式编码。如果你只是用一个完全有效的整数覆盖内存,比如:
double value = 0.0;
*((int*)&value) = 42;
// value is now something like 2.07508e-322
你仍然会得到一个"奇怪"的数字。这就是以%d作为参数的scanf内部发生的情况。
相关文章:
- 设置变量时C++程序挂起
- 从系统("command") (C++) 设置变量
- 在构造函数中设置变量失败?
- 如何为输入设置变量编号和__android_log_print格式
- 从输入文件 c++ 中提取和设置变量
- 使用 void 函数在主函数中设置变量的值
- 未在另一个函数中设置变量引用的问题
- 对于循环设置变量为条件
- 使用 argv 设置变量
- 为什么我的代码未设置变量
- 在C++中设置变量的值之前检查变量是否更好
- 在 if 语句中设置变量
- 在子类中设置变量
- 未设置变量并返回异常数字
- 如何设置变量的 char 数组的元素数量
- C++指针运行时错误 - 使用指针设置变量然后检索
- 从C++设置变量时 QML 内存泄漏
- 使用此功能在构造函数中设置变量
- 从函数设置变量时不会更改
- 类中的二传手不会设置变量