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

时间:2011-09-24 17:39:27

标签: c++ class

我正在尝试从文件中读取一个数字,并将其设置为另一个类中的 public 变量。正在读取文件的函数具有该类的指针对象实例。我面临一个奇怪的问题:

以下作品:

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),但这也不起作用。有没有理由不工作(没有我必须粘贴很多行代码)

谢谢!

2 个答案:

答案 0 :(得分:2)

正如您在评论中所说,var的类型是双倍的。是的,这就是问题所在。您应该使用%f

除此之外,我会给你一条建议:

首选使用C ++流进行I / O工作。它们是类型安全的。如果您使用它们,则不会遇到fprintf所面临的问题。

以下是您应该如何使用它:

std::ifstream file("filename.txt");
file >> globals->var; //don't worry about whether var is int, or double!

很酷,不是吗?

答案 1 :(得分:2)

问题很可能是globals-&gt; var是floatdouble将其转换为int或其他整数类型,它应该可以工作

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

double value = 0.0;
*((int*)&value) = 42;
// value is now something like 2.07508e-322
尽管如此,你还是得到了一个“奇怪”的号码。这是scanf内部发生的事情,%d作为参数。