【问题标题】:C/C++ , How to deny inputting char/string when waiting for the user to input a int , float or whatsoever?C/C++,在等待用户输入 int、float 或其他内容时如何拒绝输入 char/string?
【发布时间】:2014-04-26 11:24:00
【问题描述】:

一个初学者的问题!

如何强制用户只输入一个数字(int、float、long ..),这样他在等待数字时就不能输入字符或字符串:D 谢谢

【问题讨论】:

  • 如果您要求c++,请在此处查看我的答案:Filling structure from a file。所解释的技术允许单独检查任何字段输入操作,而无需在读取错误输入字段值时将原始输入流置于fail() 状态。但那是在输入之后。如果您想完全限制输入时接受的字符,您可能会发现 this 很有帮助。

标签: c++ validation input


【解决方案1】:

没有任何标准 C/C++ 库可以防止用户在需要数字的地方输入字符串。

如果您使用的是scanffscanf,您可以检查从函数返回的值,以确保您能够读取预期数量的数据。

如果您使用std::cinstd::ifstream,则使用fail()检查操作是否成功。

【讨论】:

    【解决方案2】:

    一般来说,输入验证可以通过两种不同的方式完成:

    1. 用户输入他的输入之后验证输入,并显示适当的消息,同时要求用户重新输入有效输入。
    2. 保留一个状态机 (FSM),该状态机知道在特定点需要哪种输入格式。当用户要输入特定字符时,会检查这些字符是否符合当前状态的规则。

    第一种解决方案很容易做到,因为您可以检查特定字段的输入操作:

    std::istream& is = <reference to any valid input stream>;
    
    double value;
    if(!(is >> value)) {
        // Issue error message
    }
    

    第二个解决方案需要在输入字符时查看字符,并立即检查是否成为输入的一部分(并在 tty 处回显)。这在简单的、独立于操作系统的方式中是不可能的。
    虽然有一些可用的技术,但可以让您根据当前的解析器 FSM 状态限制来自 std::cin 的字符输入。请查看this post 了解有关如何实现此目的的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-21
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 2016-01-15
      相关资源
      最近更新 更多