【发布时间】:2016-11-02 22:01:34
【问题描述】:
我正在尝试读取以下 OBJ 文件
#--- ObjWriter ---
v -0.599972 -0.599972 -0.599972
v -0.304591 -0.834531 0.539150
.
.
.
f 1 2 6
f 1 6 5
f 1 5 7
.
.
.
我正在尝试设置一个函数,它将顶点的值(char v 后面的 3 个值)存储到点向量(Pt 由 ax、y 和 z 组成)和 a面(char f 后面的 3 个值)到另一个面向量(面由 3 个整数组成)。到目前为止,我已经尝试使用以下功能:
void readFile(char *inFile)
{
ifstream inF(inFile);
string line;
while (getline(inF, line))
{
if (line[0] == 'v')
{
float x, y, z;
inF >> x >> y >> z;
// cout << x;
verts.push_back(Pt(x, y, z));
}
else if (line[0] == 'f')
{
int x, y, z;
inF >> x >> y >> z;
faces.push_back(Face(x, y, z));
}
else if (line[0] == '#')
continue;
}
}
每当我通过在第一个 if 语句中显示 x 值来测试此方法时,我都会得到值“-858993460”。如何修复此功能? cout 线的位置被注释掉了。
【问题讨论】:
-
-858993460是十六进制的0xCCCCCCCC。这是 Visual Studio 附带的 CRT 调试版本分配给未初始化数据的模式。由于我们无法“在第一个 if 语句中显示 x 值”,因此我们无法帮助您,也无法提供解释。 -
我把 cout 放在我做测试的地方。另外,测试所有值是否已成功存储的最佳方法是什么?
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
标签: c++ input object-files