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开头的所有整数值类型的最佳方法是什么?
答案 0 :(得分:4)
对于初学者来说,(roll == 8 || roll > 79 && roll < 90 ? "an" : "a")
更简洁。
您可以使用基于2个字符的缓冲区buf
和snprintf(buf, 2, "%d", roll)
的解决方案,但这似乎有点过分。正如评论中指出的那样,只看第一个数字对于语法的正确性是不够的,所以最好坚持使用特殊情况的分离。
答案 1 :(得分:2)
如果你想处理所有以8开头的数字,那么就应该这样做
bool startsWithEight(int number){
while(number > 10){
number /= 10;
}
return number == 8;
}
可能不是最有效的方式。