Obj Parser扫描得到奇怪的结果
Obj Parser scanf giving strange results
我正在为.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;
}
}
}
这是我的密码。
下面是我试图在中阅读的内容
v 0.0 0.0 0.0
v 0.0 0.0 1.0
v 0.0 1.0 0.0
v 0.0 1.0 1.0
v 1.0 0.0 0.0
v 1.0 0.0 1.0
v 1.0 1.0 0.0
v 1.0 1.0 1.0
这就是我找到答案的结果。
-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++iostreams从/到流进行输入和输出。
然后,我用C++编程,因为该语言存在。我从没听说过scanf_s。所以,哇,谢谢你让我意识到这一点。阅读文档,您甚至不需要它来实现。您尝试读取3个浮动,因此,_s版本在这里对您没有帮助。
然后,这是主要的错误,您使用的是scanf而不是sscanf。Scanf从stdin读取,而不是像您所期望的那样从字符串读取。我首先想知道,为什么函数不阻塞并等待用户输入。但为什么不这样做当然很清楚。您假定的输入字符串将用作格式化字符串。而且,根据定义的行为,该函数不会检测到格式化字段并立即停止。
如果您检查了函数的返回值(应该做什么),那么您就会检测到这一点。
然后,您从未初始化过3个浮点值。您应该始终初始化变量。但现在,变量包含随机值。而且scanf从来没有赋值。因此,输出是随机的。
希望我能解释的问题
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 算术运算的结果类似于:C浮点变量中的1/3
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 密码登录程序将永远循环并显示不正确的结果
- 如何让C++'tally up'结果并制定计划?
- 为什么这个程序的结果是3 "born"?和 4 死
- Obj Parser扫描得到奇怪的结果