c++ - 在任何以 8 开头的数字之前选择 "a"或 "an"

标签 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.

为 1 到 100 之间以 8 开头的数字确定“a”或“an”的内联逻辑工作正常。

1:有没有更优雅的方式来做到这一点?

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

最佳答案

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

你可以有一个基于 2 字符缓冲区的解决方案 bufsnprintf(buf, 2, "%d", roll) ,但这似乎有点矫枉过正。正如评论中所指出的,仅查看第一个数字不足以保证语法完全正确,因此最好坚持使用特殊情况的析取。

关于c++ - 在任何以 8 开头的数字之前选择 "a"或 "an",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449911/

相关文章:

c++ - AES/CBC 加密和解密之间的速度差异?

c++ - 使用/学习 VTK 和 C++ 的开发环境

C++ 计算一个字符的顺序

c++ - 如何在 QTableView 中打开一个 URL

c++ - 登录文件后使用 tellp 和 seekp 设置 block 大小是否合理?

c++ - 基本的 linux C++ 网络 : connection refused, 但是没有出现错误

c++ - C++ 中的 USB 串行验证

c++ - 如何告诉 g++ 编译器在哪里搜索包含文件?

C++ 构造函数问题

C++语法创建一个没有参数的对象