C++ Obj解析器scanf给出奇怪的结果
我正在为.obj文件做一个解析器。我正在使用scanf,但是我得到了非常奇怪的结果C++ Obj解析器scanf给出奇怪的结果,c++,scanf,.obj,C++,Scanf,.obj,我正在为.obj文件做一个解析器。我正在使用scanf,但是我得到了非常奇怪的结果 void loader::readIn() { //!takes in the all the data and //!puts in string first. std::string myString; //!save string float tmpX,tmpY,tmpZ; //!storing the floats in here . while(
void loader::readIn()
{
//!takes in the all the data and
//!puts in string first.
std::string myString; //!save string
float tmpX,tmpY,tmpZ; //!storing the floats in here .
while(!myFile.eof())
{
std::getline(myFile,myString); //!intake string
if(myString[0] == 'v' && myString[1] == ' ') //!check value
{
scanf_s(myString.c_str(), "v %f %f %f" ,&tmpX,&tmpY,&tmpZ);
std::cout<< tmpX <<" "<< tmpY <<" "<<tmpZ <<std::endl;
}
}
}
这就是我找不到答案的结果
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
非常感谢您的帮助。让我简短地向您解释一下这个问题。首先,正如评论者所写的,在C++中不应该使用任何SCANF类型函数。即使不是在C语言中,它们也容易出错且不安全(网络攻击的候选对象)。请用C++ IOFSUBES输入和输出流。 <> P>因为语言存在,我正在C++中编程。我从没听说过scanf_。所以,哇,谢谢你让我意识到。阅读文档,您甚至不需要它来实现。您尝试读取3个浮点数,因此,U的版本在这里对您没有帮助 然后,这是主要的bug,您使用的是scanf而不是sscanf。正如您所期望的,Scanf从stdin读取,而不是从string读取。我首先想知道,为什么函数不阻塞并等待用户输入。但原因当然很清楚。假定输入字符串用作格式字符串。并且,根据定义的行为,该函数不会检测格式化字段并立即停止 如果您已经检查了函数的返回值(您应该做什么),那么您就已经检测到了 然后,您从未初始化过3个浮点值。您应该始终初始化变量。但是现在,变量包含随机值。而且scanf从来没有分配过任务。因此,输出是随机的
希望,我可以解释这个问题:代码> Scffys不与
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008
-1.07374e+008 -1.07374e+008 -1.07374e+008