很容易输入不期望的输入

多数有某种用户界面的程序需要处理用户输入。在您一直在编写的程序中,您一直在使用STD:CIN要求用户输入文本输入。因为文本输入是自由格式的(用户可以输入任何东西),所以用户很容易输入不期望的输入。
在编写程序时,应始终考虑用户将如何(无意或以其他方式)滥用程序。一个写得很好的程序会预见用户会如何滥用它,或者是优雅地处理这些情况,或者防止它们发生在第一位(如果可能的话)。一个程序,处理错误的情况下,据说是强大的。
在本课中,我们将特别看一看用户可以通过非法的方式输入无效的文本输入,并显示一些不同的方法来处理这些情况。
性病:CIN,缓冲区和提取
为了讨论如何性病:CIN和运营商可以失败,它首先有助于了解他们如何工作。
当我们使用运算符来获取用户输入并将其输入变量时,这称为“提取”。运算符在此上下文中使用,因此称为提取运算符。
当用户响应于提取操作输入输入时,该数据被放置在。缓冲区(也称为数据缓冲区)仅仅是一块内存,用来暂时存储数据,而它是从一个地方移动到另一个地方的。在这种情况下,缓冲区被用来保存用户输入,而它等待被提取到变量。
使用提取运算符时,会发生下列过程:
如果输入缓冲区中已有数据,则使用该数据进行提取。
如果输入缓冲区不包含数据,则要求用户输入数据以提取(大多数情况下是这样)。当用户单击输入时,将在输入缓冲区中放置一个“\\”字符。
运算符> >提取尽可能多的数据从输入缓冲区可以为变量(忽略任何前导空白字符,如空格,制表符,或“\\n”)。
任何无法提取的数据留在下一个提取的输入缓冲区中。

如果从输入缓冲区中提取至少一个字符,则提取成功。任何未提取的输入是未来提取输入缓冲区左。例如:


 
double getDouble()
{
    std::cout << "Enter a double value: ";
    double x;
    std::cin >> x;
    return x;
}
 
char getOperator()
{
    std::cout << "Enter one of the following: +, -, *, or /: ";
    char op;
    std::cin >> op;
    return op;
}
 
void printResult(double x, char op, double y)
{
    if (op == '+')
        std::cout << x << " + " << y << " is " << x + y << '\n';
    else if (op == '-')
        std::cout << x << " - " << y << " is " << x - y << '\n';
    else if (op == '*')
        std::cout << x << " * " << y << " is " << x * y << '\n';
    else if (op == '/')
        std::cout << x << " / " << y << " is " << x / y << '\n';
}
 
int main()
{
    double x = getDouble();
    char op = getOperator();
    double y = getDouble();
 
    printResult(x, op, y);
 
    return 0;
}

如果用户要进入B,提取将失败,因为“B”不能被提取到一个整型变量。
验证输入
检查用户输入是否符合程序期望的过程称为输入验证。
输入验证有三种基本方法:
内联(作为用户类型)
防止用户在第一位输入无效输入。
输入后(用户类型后)
让用户输入任何他们想要的字符串,然后验证字符串是否正确,如果是,将字符串转换为最终变量格式。
让用户输入他们想要的任何内容,让性病::CIN和操作员>试图提取它,并处理错误的情况下。
一些图形用户界面和高级文本界面将让您验证输入的用户输入(字符按字符)。一般来说,程序员提供了一个验证函数,该函数接受用户输入到目前为止的输入,如果输入有效,则返回true,否则为false。每次用户按下键时都会调用此函数。如果验证函数返回true,则用户按下的键将被接受。如果验证函数返回false,则用户输入的字符将被丢弃(而不是在屏幕上显示)。使用此方法,可以确保用户输入的任何输入都是有效的,因为任何无效的击键都会被立即发现并丢弃。不幸的是,性病:CIN不支持这种风格的验证。
由于字符串没有什么限制,可以输入任何字符,提取是保证成功(虽然记得std::cin停止提取在第一个非空格字符)。一旦输入一个字符串,程序就可以解析字符串,看看字符串是否有效。然而,分析字符串和转换字符串输入到其他类型(例如数字)是具有挑战性的,所以这只是在罕见的情况下。
最常见的,我们让性病:CIN和提取运营商做艰苦的工作。在这种方法下,我们让用户输入他们想要的任何内容,有性病:CIN和运营商试图提取它,并处理辐射,如果它失败。这是最简单的方法,我们将在下面讨论更多的方法。
一个示例程序
考虑下面的计算器程序,没有错误处理:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值