用户输入不期望的输入
来源:互联网 发布:网络工程项目名称 编辑:程序博客网 时间:2024/05/21 17:54
大多数程序都有一个用户界面的某种需要处理用户输入。在项目中,你一直在写,你一直在使用std::cin要求用户输入文本输入。由于文本输入是如此的自由形式(用户可以输入任何东西),所以很容易为用户输入不期望的输入。
当你写程序时,你应该总是考虑用户如何(无意或其他方式)误用你的程序。一个写得很好的程序将预期用户将如何滥用它,或者优雅地处理这些情况,或者阻止他们发生在第一位(如果可能的话)。一个处理错误情况的程序,被认为是强大的。
在这节课中,我们来看看具体的办法,用户可以通过标准输入无效的文本输入::CIN,并告诉你一些不同的方式来处理这些情况。
std::cin,缓冲,和提取
为了探讨std::cin和运算符> >可以失败,它首先有助于了解它们是如何工作的一点点。
当我们使用操作符来获取用户输入,并把它变成一个变量时,这被称为“提取”。在此上下文中使用时,相应地调用了提取运算符。
当用户输入响应提取操作输入,数据被放置在一个缓冲区::性病在CIN。一个缓冲区(也称为数据缓冲区)只是一个暂时的存储数据的内存块,而它从一个地方移动到另一个地方。在这种情况下,缓冲区是用来保存用户输入的,而它的等待被提取到变量。
现在,考虑无效的用户输入可能会打破这个程序。
首先,我们要求用户输入一些数字。如果他们进入了一个数字以外的其他东西(例如:“问”)?在这种情况下,提取将失败。
第二,我们要求用户输入四个可能的符号之一。如果他们进入一个字符以外的符号,我们期待什么呢?我们将能够提取输入,但我们目前没有处理之后会发生什么。
第三,如果我们要求用户输入一个符号,他们输入一个像“*问你好”的字符串。虽然我们可以提取我们需要的“*”字符,但在缓冲区中有额外的输入,可能会导致道路上的问题。
无效文本输入的类型
我们通常可以将输入的文本错误分为四种类型:
当你写程序时,你应该总是考虑用户如何(无意或其他方式)误用你的程序。一个写得很好的程序将预期用户将如何滥用它,或者优雅地处理这些情况,或者阻止他们发生在第一位(如果可能的话)。一个处理错误情况的程序,被认为是强大的。
在这节课中,我们来看看具体的办法,用户可以通过标准输入无效的文本输入::CIN,并告诉你一些不同的方式来处理这些情况。
std::cin,缓冲,和提取
为了探讨std::cin和运算符> >可以失败,它首先有助于了解它们是如何工作的一点点。
当我们使用操作符来获取用户输入,并把它变成一个变量时,这被称为“提取”。在此上下文中使用时,相应地调用了提取运算符。
当用户输入响应提取操作输入,数据被放置在一个缓冲区::性病在CIN。一个缓冲区(也称为数据缓冲区)只是一个暂时的存储数据的内存块,而它从一个地方移动到另一个地方。在这种情况下,缓冲区是用来保存用户输入的,而它的等待被提取到变量。
当使用提取运算符时,下面的过程会发生:
12345678910111213141516171819202122232425262728293031323334353637383940#include <iostream> 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;
现在,考虑无效的用户输入可能会打破这个程序。
首先,我们要求用户输入一些数字。如果他们进入了一个数字以外的其他东西(例如:“问”)?在这种情况下,提取将失败。
第二,我们要求用户输入四个可能的符号之一。如果他们进入一个字符以外的符号,我们期待什么呢?我们将能够提取输入,但我们目前没有处理之后会发生什么。
第三,如果我们要求用户输入一个符号,他们输入一个像“*问你好”的字符串。虽然我们可以提取我们需要的“*”字符,但在缓冲区中有额外的输入,可能会导致道路上的问题。
无效文本输入的类型
我们通常可以将输入的文本错误分为四种类型:
char getOperator(){ while (1) // Loop until user enters a valid input { std::cout << "Enter one of the following: +, -, *, or /: "; char op; std::cin >> op; // Check whether the user entered meaningful input if (op == '+' || op == '-' || op == '*' || op == '/') return op; // return it to the caller else // otherwise tell the user what went wrong std::cout << "Oops, that input is invalid. Please try again.\n"; } // and try again}
0 0
- 用户输入不期望的输入
- 用户输入不期望的输入
- 所以用户很容易输入不期望的输入
- 很容易输入不期望的输入
- [C]获取用户输入字符串------在不知道用户输入长度的时候
- 用户输入
- 限制用户输入的方法
- 怎么样验证用户的输入?
- 格式化用户输入的文本
- 获取用户输入的字符!
- Java获取用户的输入
- Java获取用户的输入
- 关于用户输入的安全问题
- Android的用户输入处理
- Android的用户输入处理
- Java获取用户的输入
- 校验用户输入的生日
- 控制用户的输入流程
- Loadrunner 接口测试的两种方法
- 百度加固
- Linux查看程序端口占用情况
- 一个算法问题,现有一千瓶药水,其中九百九十九瓶是完全一样的, 只有一瓶里面是毒药
- JNI常识
- 用户输入不期望的输入
- Leetcode 8 String to Integer (atoi)
- 数据库锁表原因分析
- Application.mk
- python 处理csv,对比两个csv的不同
- zabbix安装
- js简单倒数计时
- android UI进阶之弹窗的使用
- Ubuntu14.04下安装zbar