Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打印NaN值_C++_Windows_Printf_Nan - Fatal编程技术网

C++ 打印NaN值

C++ 打印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; } 不能像那样使

我如何使下面的代码工作?我想打印“未定义”而不是-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;
}

不能像那样使用
args
,必须使用
va_arg
来获取实际参数

if(_isnan(va_arg(args,double)))
我想这样做,但那对你没有多大帮助。无法从参数推断类型。向
va_arg
指示的类型必须是传入对象的实际类型


<> p>并且,您的<代码> vPrtutf调用也不起作用,您需要重新启动VAI列表,因为 VAYARG< /COD>已经“消耗”一个参数。

由于代码< STATICORCAST 添加了C++标签。要么将其更改为C样式转换,要么停止恢复标记更改!您必须编写自己版本的printf()。这太痛苦了,请编写一个双精度到字符串的转换函数,这样您就可以在printf格式中使用%s。@Hans Passant-您能提供一个代码示例吗?如何“重新启动”va_列表?您能为正确的myprint实现编写一个代码吗?不,我不能编写正确版本的代码。您需要彻底重新实现
printf
——有很多开源实现。要重新启动参数处理,只需
va_end(args);va_开始(参数,格式)sqrt
被声明为
double sqrt(double x)。传递给
va_arg
的类型必须与传递给函数的类型匹配。如果您的实现有,请使用
sqrtf
,如果您想要浮点,请在调用站点转换为浮点。
if(_isnan(va_arg(args,double)))