【发布时间】:2013-10-18 10:09:15
【问题描述】:
我对这段代码有疑问:
void readObj(const char* fName, std::vector<Vector3> &tempVertex, std::vector<Face3> &tempFaces){
FILE* file;
file = fopen(fName, "r");
if (file == 0)
printf("#ERROR# can't open file!");
else{
while(true){
char lineHeader[1000];
int res = fscanf(file, "%s", lineHeader);
if (res == EOF)
break;
else if (strcmp(lineHeader, "v ") == 0){
Vector3 v;
fscanf(file, "%f %f %f\n", &v.x, &v.y, &v.z);
cout<<"tempVertex.push_back(v)";
tempVertex.push_back(v);
}
else if (strcmp(lineHeader, "f ") == 0){
Face3 f;
fscanf(file, "%d %d %d", &f.a, &f.b, &f.c);
cout<<"tempFaces.push_back(f)";
tempFaces.push_back(f);
}
else{
fscanf(file, "/n");
cout<<"Nothing in this line!\n";
}
}
}
}
我在这里使用它:
private: System::Void readFile(System::Object^ sender, System::EventArgs^ e) {
vector<Vector3> test;
vector<Face3> ftest;
reading::readObj("Text.txt", test, ftest);
}
Test.txt:
v 1.0f 2.0f 3.0
f 1 2 3
而且它只生产:
Nothing in this line! (x8)
而不是 tempVertex.push_back(v) 和 tempFaces.push_back(f)。
【问题讨论】:
-
为什么在 C++ 程序中使用 C 函数?使用流和
std::string。 -
另外,你为什么要扫描
"/n"?对于"f"行,不要忘记以fscanf格式添加尾随空格。 -
你的 else 不见了
{} -
一个月前刚开始接触c++,不知道怎么跳行
标签: c++ file opengl scanf strcmp