C++ 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(

我正在为.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(!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不与ScScFifs相同。这是你在C++中使用代码< SCANF >的一个变体的惩罚。主要是对不遵守FM的惩罚。(看,<代码> ScFF()/c++不仅对C++有危害,而且在C中也不适用,我发誓!)V之后,在标准对象后面有两个空白,一个是VT,一个是VN。syntax@H2CO3字体同意--不管怎样,这都不太妙。C并没有给你很多其他的选择。C++做的。
-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