C++ 打印NaN值
我如何使下面的代码工作?我想打印“未定义”而不是-1.#IND00C++ 打印NaN值,c++,windows,printf,nan,C++,Windows,Printf,Nan,我如何使下面的代码工作?我想打印“未定义”而不是-1.#IND00 int-myprint(常量字符*格式,…) { va_列表参数; va_开始(参数,格式); int ret; 如果(_isnan(静态_cast(*args))) ret=printf(“未定义”); 其他的 ret=vprintf(格式,参数); fflush(stdout); va_端(args); 返回ret; } int main() { myprint(“%f”,sqrt(-1.0)); 返回0; } 不能像那样使
int-myprint(常量字符*格式,…)
{
va_列表参数;
va_开始(参数,格式);
int ret;
如果(_isnan(静态_cast(*args)))
ret=printf(“未定义”);
其他的
ret=vprintf(格式,参数);
fflush(stdout);
va_端(args);
返回ret;
}
int main()
{
myprint(“%f”,sqrt(-1.0));
返回0;
}
不能像那样使用args
,必须使用va_arg
来获取实际参数
if(_isnan(va_arg(args,double)))
我想这样做,但那对你没有多大帮助。无法从参数推断类型。向va_arg
指示的类型必须是传入对象的实际类型
<> p>并且,您的<代码> vPrtutf调用也不起作用,您需要重新启动VAI列表,因为
printf
——有很多开源实现。要重新启动参数处理,只需va_end(args);va_开始(参数,格式)因为sqrt
被声明为double sqrt(double x)代码>。传递给va_arg
的类型必须与传递给函数的类型匹配。如果您的实现有,请使用sqrtf
,如果您想要浮点,请在调用站点转换为浮点。
if(_isnan(va_arg(args,double)))