整数被设置为任意值
Integer being set to an arbitrary value
在.mtl文件中读取的类中,我有一个整数值,该值存储正在读取的材料的当前索引,并且在执行ifstream.getline()之后,该值被设置为一个非常大的数字。有人知道为什么会发生这种情况以及如何解决吗?
std::ifstream inf(fileName);
int mtlcount = -1;
if(!inf)
{
std::cout << "File could not be opened";
return 1;
}
while(!inf.eof())
{
char line[40];
inf.getline(line, 40);
//mtlcount set to a random value here
//more code
}
编辑:该项目正在使用DirectX 11,和mtcount只是被设置为一个非常高的值,我不知道它是如何确定的,所以也许随机不是正确的词。
int Parser::readMtlFile(std::string fileName, std::vector<Material>* materials)
{
std::ifstream inf(fileName);
int mtlcount = -1;
if(!inf)
{
std::cout << "File could not be opened";
return 1;
}
while(!inf.eof())
{
char line[40];
inf.getline(line, 40);
if(line[0] == 'n' && line[1] == 'e' && line[2] == 'w' && line[3] == 'm' && line[4] == 't' && line[5] == 'l')
{
mtlcount++;
std::string mtlName;
Material mtl;
materials->push_back(mtl);
int i = 7;
while(line[i] != 'n' && i < 40)
{
mtlName += line[i];
i++;
}
materials->at(mtlcount).name = mtlName;
}
if(line[0] == 'K' && line[1] == 'a')
{
float r, g, b;
sscanf_s(line, "Ka %f %f %f", &r, &g, &b);
materials->at(mtlcount).ambient = XMFLOAT4(r, g, b, 1.0);
}
if(line[0] == 'K' && line[1] == 'd')
{
float r, g, b;
sscanf_s(line, "Kd %f %f %f", &r, &g, &b);
materials->at(mtlcount).diffuse = XMFLOAT4(r, g, b, 1.0);
}
if(line[0] == 'K' && line[1] == 's')
{
float r, g, b;
sscanf_s(line, "Ka %f %f %f", &r, &g, &b);
materials->at(mtlcount).specular = XMFLOAT4(r, g, b, 1.0);
}
}
}
您可能需要阅读sscanf_s
的参考资料,因为您没有正确使用它。这意味着你的代码有未定义的行为,这意味着你有任何行为可能是因为
相关文章:
- 构造函数将所有值设置为 0
- 将十六进制值设置为用于填充的字符变量时出现问题
- 对于完成布尔值设置为 true 后未停止的循环
- C++ Visual studios 2017 CHAR_MIN将值设置为 0
- 如何在C++中围绕任意值实现我所谓的"wraparound sort"?
- 第二个 while 循环未运行,将值设置为 "nan"
- 从文件读取到映射中,该映射将键作为整数,并将相应的值设置为设置
- 在 c++ 中使用右值设置类变量的最有效方法是什么
- 将值设置为 char ** 变量 c++ 时出错
- 将结构的值设置为五个可能之一
- C 将值设置为特定地址
- 当输入高于最大值的值时,如何将 QSpinBox 的值设置为 max
- 如何将常量中的值设置为结构 c++ 中
- 用作函数参数时,将默认值设置为 C 数组
- 给定一个大小的布尔数组,这都是真实的,我将如何仅使用递归将所有值设置为false
- 您如何将特定值设置为动态数组
- 类成员函数返回的任意值
- 我无法正确获取这些变量声明...为什么这些参数不起作用?我只是将 n 值设置为数组长度
- 创建一个函数,该函数吸收数组并循环添加数组,并将第二个数组值设置为零
- 整数被设置为任意值