c - 摆脱||或者在 C 编程中

标签 c

我正在使用 ||,这样如果用户输入 Yy,它们的效果是一样的。示例:(option=='y' || option =='Y') 我知道有一个函数可以解决这个问题,以便用户输入 Yy 相同。

执行此操作的最佳方法是什么?

最佳答案

假设optionchar类型,你可以替换

if (option == 'y' || option == 'Y')

通过

if (tolower((unsigned char)option) == 'y')

转换为 unsigned char 是必要的。 tolower 采用 int 类型的参数,其值必须在 unsigned char 范围内或等于 EOF (通常为 -1)。如果普通 char 碰巧被签名(这很常见)并且如果 option 的值恰好为负(如果输入不正常则可能发生),那么 tolower(option) 会有未定义的行为。

(是的,强制转换的需要令人讨厌且违反直觉。是的,tolower() 应该接受char 范围内的任何参数>. 是的,你仍然需要处理它。)

其他可能性:

option = tolower((unsigned char)option);
if (option == 'y') ...

switch (option) {
    case 'y': case 'Y': ...
    ...
}

switch 解决方案仍然针对 'y''Y' 进行测试,但它不那么冗长;您不必多次提及 option。当然,您也可以切换 tolower((unsigned char)option)

关于c - 摆脱||或者在 C 编程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39982010/

相关文章:

c++ - 我应该从 main() 返回 EXIT_SUCCESS 还是 0?

c - 有没有一种方法可以将结构索引为 Glib 哈希表中的值?

c++ - 函数内部数组的动态分配

c - 为什么 bool 表达式中元素的顺序会改变结果?

c - 快速读取大于c中内存的文件

c - C execve() 函数是否终止子进程?

c - esp32中内部ADC的精度问题

C execv() 参数问题

c - 如何在c中实现结构体中的变量?

java - 在文件读取/打开时提供来自准备运行的程序的输出