使用fscanf在不同的类中设置变量

Using fscanf to set a variable in a different class

本文关键字:设置 变量 fscanf 使用      更新时间:2023-10-16

我试图从文件中读取一个数字,并将其设置为不同类中的公共变量。读取文件的函数有一个该类的指针对象实例。我遇到了一个奇怪的问题:

以下作品:

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是floatdouble将其转换为int或其他整数类型,它应该工作

输出"垃圾"的原因是float/double数字以一种特殊的方式编码。如果你只是用一个完全有效的整数覆盖内存,比如:

double value = 0.0;
*((int*)&value) = 42;
// value is now something like 2.07508e-322

你仍然会得到一个"奇怪"的数字。这就是以%d作为参数的scanf内部发生的情况。