打印NaN值

时间:2011-10-30 19:41:48

标签: c++ windows printf nan

我如何使以下代码有效?我想打印“未定义”而不是-1。#IND00

int myprint(const char* format, ...)
{
    va_list args;
    va_start (args, format);
    int ret;
    if(_isnan(static_cast<float>(*args)))
        ret = printf ("non defined");
    else
        ret = vprintf (format, args);
    fflush(stdout);
    va_end (args); 
    return ret; 
}

int main()
{
    myprint("%f", sqrt(-1.0));
    return 0;
}

1 个答案:

答案 0 :(得分:3)

你不能像这样使用args,你必须使用va_arg来获得实际的论点。

if(_isnan(va_arg(args,double)))

可以做到这一点,但这对你没有多大帮助。您无法从参数中推断出类型。您向va_arg指示的类型必须是传入的对象的实际类型。

由此,您的vprintf调用也无效,您需要“重新启动”va_list,因为va_arg已经“消耗”了一个参数。