我正在尝试从文件中读取一个数字,并将其设置为另一个类中的 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)
,但这也不起作用。有没有理由不工作(没有我必须粘贴很多行代码)
谢谢!
答案 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是float
或double
将其转换为int
或其他整数类型,它应该可以工作
它输出“垃圾”的原因是float
/ double
数字以特殊方式编码。如果你只用一个完全有效的整数覆盖那个内存,如:
double value = 0.0;
*((int*)&value) = 42;
// value is now something like 2.07508e-322
尽管如此,你还是得到了一个“奇怪”的号码。这是scanf内部发生的事情,%d作为参数。