gpt4 book ai didi

c++ - 什么时候可以安全使用 `isalpha()`

转载 作者:行者123 更新时间:2023-11-30 02:25:24 24 4
gpt4 key购买 nike

我有GLFW key_callback() 并且我正在尝试检测是否按下了字母字符。我用这个功能isalpha() .我注意到如果执行以下代码,某些键(例如 Shift 和 Alt)会被视为字母字符:

#include <iostream>                                                                                                                                                                                         

int main()
{
// 340: printed int if the Shift key is pressed.
if( isalpha(340) )
std::cout << "alpha" << std::endl;
else
std::cout << "not alpha" << std::endl;

return 0;
}

前面的代码产生alpha。我可以验证传递给函数的整数范围,但这没有任何意义,因为我没有利用该函数。 我的问题 将任何整数传递给该函数并使用简单的 if 语句来验证字母字符是否安全?使用该功能有什么注意事项吗?

最佳答案

key_callback 不是 C++ 的标准部分,因此我进行了搜索并假设您所谈论的是 GLFW 库的一部分。在那个图书馆里,key_callback给出键盘扫描码。

扫描码不是字符。在典型的输入模型中,有一个状态机将扫描码(以及扫描码的序列和组合)映射到字符。该层允许您将 QWERTY 键盘更改为像 Dvorak 键盘或设计用于输入另一种语言的键盘一样工作。此 key_callback 级别较低,将映射留给您。

C++ std::isalpha函数将 char 转换为 int 或特殊标记值 EOF,通常为 -1。 (在某些系统上,您会发现需要先将 char 转换为 unsigned char,然后再将其转换为 int。)扫描码不是字符,因此将扫描码传递给 std::isalpha 是没有意义的。

特别是,值 340 超出了 unsigned char 的范围,而且它不是 EOF,所以它真的不能指望做任何有意义的事情。

如果您需要字符,则必须构建您自己的从扫描码(和扫描码的组合)到字符的映射。看起来该库具有为扫描码定义的常量。例如,GLFW_KEY_LEFT_SHIFT是 340。这应该有所帮助。如果您只需要知道某个特定的键是按下还是释放,您可以将扫描码与适当的常量进行比较。

注意:您标记了 C++ 问题,但您链接到了 isalpha 的 C 版本的文档。

关于c++ - 什么时候可以安全使用 `isalpha()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44217019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com