C++ 选择;a「;或;";在以8开头的任何数字之前

C++ 选择;a「;或;";在以8开头的任何数字之前,c++,C++,对于从1到100之间的8开始的数字,用于确定“a”或“an”的内联逻辑可以正常工作 1:有没有更优雅的方式 2:处理所有以8开头的整数值类型的最佳方法是什么?好的(roll==8 | | roll>79&&roll8*,它将以8作为起始匹配所有模式。18怎么样?安东·科瓦连科和jwodder,是的,我忘了这些!通过printf(“您滚动了%d.”,滚动),完全避免问题是否更简单?这仍然是完全正确的(可以说是更好的)英语-使用不确定的文章是完全多余的。请考虑修改你的接受到(更新)。它更一般化,表达

对于从1到100之间的8开始的数字,用于确定“a”或“an”的内联逻辑可以正常工作

1:有没有更优雅的方式

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

好的
(roll==8 | | roll>79&&roll<90?:“a”)
对于初学者来说更简洁


您可以有一个基于两个字符的缓冲区
buf
snprintf(buf,2,“%d”,roll)
的解决方案,但这似乎有些过分了。正如评论中所指出的,仅仅看第一个数字不足以保证语法的正确性,因此最好还是坚持特殊情况的析取。

如果你想处理所有以8开头的数字,那么按照这条线应该做些什么

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

可能不是最有效的方法。

一种方法是将数字改为字符串,然后进行模式匹配,如-->8*,它将以8作为起始匹配所有模式。18怎么样?安东·科瓦连科和jwodder,是的,我忘了这些!通过
printf(“您滚动了%d.”,滚动)
,完全避免问题是否更简单?这仍然是完全正确的(可以说是更好的)英语-使用不确定的文章是完全多余的。请考虑修改你的接受到(更新)。它更一般化,表达更清晰,总体上是你问题的更好的解决方案。同意,帕斯卡·库克。感谢您的回复。更简洁的是:
(roll==8 | | roll/10==8)
更好的名称:startsWithEight。还有,这有点复杂…为什么不从数字开始,然后除以它,只要它大于10?@HostileFork你对名字的看法是对的,这怎么比那样更复杂?虽然这样我可以省下一个额外的分区,但我想,这真的只是在我的头上。嗯,我认为任何时候你有一个没有内容的
for
循环,这有点难接受。我也不建议在声明时不初始化变量。即使是这样,你也可以说
inti=10;而(i
我认为这更清楚。但是如果你从
inti=number中仔细考虑这一点你不会在做乘法运算并撤销它。。。只是“曲折”
You rolled a 12.
You rolled an 8.
You rolled an 84.
You rolled a 97.
bool startsWithEight(int number){
    while(number > 10){
        number /= 10;
    }
    return number == 8;
}