如果值为0,则输出字符串“nan”

时间:2016-12-29 19:41:06

标签: c++ stream

我需要输出一个数字,除非它是0,其中输出必须是“nan” 我做不到

int x;
...
cout << (!x ? "nan" : x);

因为三元表达式中的类型不匹配。我能做到

void f(ostream& o, int x)
{ 
    if (!x) o << x;
    else o << "nan";
}

对我来说看起来有点难看。有更好的解决方案吗? 像

这样的东西
cout << nanify(x);

可能?

3 个答案:

答案 0 :(得分:3)

我并不是说我会这样做,但是可以安装自定义std::num_get<char>方面,以便在nan0时打印#include <algorithm> #include <iostream> #include <locale> class zero_num_put : public std::num_put<char> { iter_type do_put(iter_type out, std::ios_base& str, char_type fill, long v) const { if (v == 0) { static char nan[] = "nan"; return std::copy(nan, nan + 3, out); } return std::num_put<char>::do_put(out, str, fill, v); } }; int main() { std::locale loc(std::locale(), new zero_num_put); std::cout.imbue(loc); std::cout << 0 << " " << 17 << "\n"; } 印刷:

app.showDialog('viewmodels/task/main', "222").then(function (action, model) {
if (action == "save") {
 // save content from dialog
}
}

答案 1 :(得分:1)

为什么不使用它:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:0)

你可以沿着这些方向使用:

std::string nanify(const int x) {
    if (x) { /* If not 0, return 'x' as a string */
        return std::to_string(x);
    }
    /* Else, return "nan" string */
    return "nan";
}

std::cout << nanify(0) << ' ' << nanify(15); /* nan 15 */