是否有键盘输入不被视为char?

时间:2015-10-22 18:38:26

标签: c++ validation input

感谢您先花时间阅读本文,

我目前正在用C ++编写一个类的驱动程序,我需要用户输入一些内容。我已经开始使用typedef创建验证程序,因此我可以非常轻松地在不同类型之间切换。对于我正在处理的特定问题,我发现我只与char合作,这引出了我的问题:

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

  2. 用户可以输入的任何内容都不会被视为char吗?

  3. 这个问题可能看起来有点微不足道但我以前从未真正考虑过这个问题!仍然学习语言,所以任何指导都表示赞赏。

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

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

2 个答案:

答案 0 :(得分:1)

  

用户可以输入的任何内容都不会被视为char吗?

是: Shift Ctrl Alt Num Lock 等等。

重点是键盘是它自己的野兽,每个按键的按键释放都有一个潜在的输出。键盘驱动程序(软件)会将这些事件转换为一系列char,用于程序的cin/stdin。或者,程序可以访问低级事件,但可能超出标准C ++代码。

建议继续使用cin偶尔收到通常256个char '\0' 的模型,直到程序结束或cin某些源关闭,无论是键盘,重定向文件输入,管道输入还是远程设备。忽略输入通常来自键盘的想法。它只是char的序列。

  

使用验证毫无意义吗?

验证很有用。代码应根据程序的要求验证到达的char - 而不是char的要求。例如,代码可能无法处理空字符,负charchar在ASCII范围0 - 127之外,或者在行结尾之间有太多char。验证输入使代码能够抵御利用易受攻击程序的黑客。

答案 1 :(得分:-1)

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

国际字符处理是复杂。并非所有世界类型都是ASCII。