是否有不被视为字符的键盘输入?

Is there keyboard input that isn't considered a char?

本文关键字:键盘 输入 字符 是否      更新时间:2023-10-16

首先感谢您花时间阅读这篇文章

我目前正在为c++中的一个类编写驱动程序,我需要用户的一些输入。我已经开始使用typedef来创建验证程序,这样我就可以相当容易地在不同类型之间切换。对于我正在处理的特定问题,我发现我只使用char,这使我产生了我的问题:

  1. 我的验证检查是否输入是char。如果我知道我只是特别使用char,那么使用验证是否毫无意义?用户输入的所有内容似乎都是一个字符

  2. 是否有任何用户可以输入的内容不会被认为是char ?

这个问题可能看起来有点琐碎,但我从来没有真正想过这个问题!还在学习语言,所以任何指导都很感激。

有问题的代码(ElementType是类型char):

void getInput( ElementType & cho )
{
    while ( !(cin >> cho) )
    {
        cout<< "That is an invalid input..."
            << "nTry again: ";
    }
    cout<< endl;
}

是否有任何用户可以输入但不会被认为是字符的内容?

<

Yes: 转变/kbd>, Ctrl , Alt , 数字锁定键等等。

关键是键盘是它自己的野兽,对于每一个键的按下和释放都有潜在的输出。键盘驱动程序(软件)接收这些事件并将它们转换成一系列的char,用于程序的cin/stdin。或者,程序可以访问低级事件,但可能超出标准c++代码的范围。

建议保持cin偶尔接收包括''在内的256个不同char中的任何的模型,直到程序端或cin某些源(键盘、重定向文件输入、管道输入或远程设备)关闭。忽略输入通常来自键盘的想法。它只是char的一个序列。

使用验证毫无意义吗?

验证是有用的。代码应该根据程序的需求来验证到达的char,而不是char的需求。例如,代码可能在处理空字符、负char、ASCII范围0 - 127之外的char或行尾之间太多的char时遇到问题。验证输入使代码能够抵御黑客利用脆弱程序的攻击。

在Linux下,使用UTF-8输入,我当然可以输入很多不是char的东西。例如,输入á会得到两个字节。还有很多其他的,可以直接输入,这取决于相应的键盘处理。

国际字符处理复杂。不是世界上所有的类型都是ASCII。