选择""或"和#34;在以8开头的任何数字之前

时间:2015-04-04 18:22:35

标签: c++

int roll = RANDOM(1, 100);
printf("You rolled %s %d.", (roll == 8 ? "an" : ((roll > 79 && roll < 90) ? "an" : "a")));

潜在产出:

You rolled a 12.
You rolled an 8.
You rolled an 84.
You rolled a 97.

用于确定&#34; a&#34;的内联逻辑或&#34;&#34;对于以1到100之间的8开头的数字可以正常工作。

1:有更优雅的方式吗?

2:处理以8开头的所有整数值类型的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

对于初学者来说,(roll == 8 || roll > 79 && roll < 90 ? "an" : "a")更简洁。

您可以使用基于2个字符的缓冲区bufsnprintf(buf, 2, "%d", roll)的解决方案,但这似乎有点过分。正如评论中指出的那样,只看第一个数字对于语法的正确性是不够的,所以最好坚持使用特殊情况的分离。

答案 1 :(得分:2)

如果你想处理所有以8开头的数字,那么就应该这样做

bool startsWithEight(int number){
    while(number > 10){
        number /= 10;
    }
    return number == 8;
}

可能不是最有效的方式。