大多数有某种用户界面的程序需要处理用户输入.。在项目中,你一直在写,你一直在使用std::cin要求用户输入文本输入。因为文本输入是自由格式的(用户可以输入任何东西),所以用户很容易输入不期望的输入.。
在编写程序时,应始终考虑用户将如何(无意或以其他方式)滥用程序.。一个写得很好的程序会预见用户会如何滥用它,或者是优雅地处理这些情况,或者防止它们发生在第一位(如果可能的话)。一个程序,处理错误的情况下,据说是强大的。
在这节课中,我们来看看具体的办法,用户可以通过标准输入无效的文本输入::CIN,并告诉你一些不同的方式来处理这些情况。
std::cin,缓冲,和提取
为了探讨std::cin和运算符> >可以失败,它首先有助于了解它们是如何工作的一点点。
当我们使用运算符来获取用户输入并将其输入变量时,这称为“提取”。运算符在此上下文中使用,因此称为提取运算符.。
当用户输入响应提取操作输入,数据被放置在一个缓冲区::性病在CIN。缓冲区(也称为数据缓冲区)仅仅是一块内存,用来暂时存储数据,而它是从一个地方移动到另一个地方的.。在这种情况下,缓冲区被用来保存用户输入,而它等待被提取到变量.。
一些图形用户界面和高级文本界面将让您验证输入的用户输入(字符按字符)。一般来说,程序员提供了一个验证函数,该函数接受用户输入到目前为止的输入,如果输入有效,则返回true,否则为false。每次用户按下键时都会调用此函数.。如果验证函数返回true,则用户按下的键将被接受.。如果验证函数返回false,则用户输入的字符将被丢弃(而不是在屏幕上显示)。使用这种方法,你可以确保任何输入用户输入是保证是有效的,因为任何无效的按键是发现并立即丢弃。不幸的是,std::cin不支持这种风格的验证。
由于字符串没有什么限制,可以输入任何字符,提取是保证成功(虽然记得std::cin停止提取在第一个非空格字符)。一旦输入一个字符串,程序就可以解析字符串,看看字符串是否有效.。然而,分析字符串和转换字符串输入到其他类型(例如数字)是具有挑战性的,所以这只是在罕见的情况下。
通常,我们让std::cin和提取算子做艰苦的工作。在这种方法下,我们让用户输入他们想要的任何东西,有std::cin和运算符> >尝试提取,和处理的后果如果失败。这是最简单的方法,我们将在下面讨论更多的方法.。
一个示例程序
考虑下面的计算器程序,没有错误处理:
在编写程序时,应始终考虑用户将如何(无意或以其他方式)滥用程序.。一个写得很好的程序会预见用户会如何滥用它,或者是优雅地处理这些情况,或者防止它们发生在第一位(如果可能的话)。一个程序,处理错误的情况下,据说是强大的。
在这节课中,我们来看看具体的办法,用户可以通过标准输入无效的文本输入::CIN,并告诉你一些不同的方式来处理这些情况。
std::cin,缓冲,和提取
为了探讨std::cin和运算符> >可以失败,它首先有助于了解它们是如何工作的一点点。
当我们使用运算符来获取用户输入并将其输入变量时,这称为“提取”。运算符在此上下文中使用,因此称为提取运算符.。
当用户输入响应提取操作输入,数据被放置在一个缓冲区::性病在CIN。缓冲区(也称为数据缓冲区)仅仅是一块内存,用来暂时存储数据,而它是从一个地方移动到另一个地方的.。在这种情况下,缓冲区被用来保存用户输入,而它等待被提取到变量.。
使用提取运算符时,会发生下列过程:
int x;
std::cin >> x;
#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)
一些图形用户界面和高级文本界面将让您验证输入的用户输入(字符按字符)。一般来说,程序员提供了一个验证函数,该函数接受用户输入到目前为止的输入,如果输入有效,则返回true,否则为false。每次用户按下键时都会调用此函数.。如果验证函数返回true,则用户按下的键将被接受.。如果验证函数返回false,则用户输入的字符将被丢弃(而不是在屏幕上显示)。使用这种方法,你可以确保任何输入用户输入是保证是有效的,因为任何无效的按键是发现并立即丢弃。不幸的是,std::cin不支持这种风格的验证。
由于字符串没有什么限制,可以输入任何字符,提取是保证成功(虽然记得std::cin停止提取在第一个非空格字符)。一旦输入一个字符串,程序就可以解析字符串,看看字符串是否有效.。然而,分析字符串和转换字符串输入到其他类型(例如数字)是具有挑战性的,所以这只是在罕见的情况下。
通常,我们让std::cin和提取算子做艰苦的工作。在这种方法下,我们让用户输入他们想要的任何东西,有std::cin和运算符> >尝试提取,和处理的后果如果失败。这是最简单的方法,我们将在下面讨论更多的方法.。
一个示例程序
考虑下面的计算器程序,没有错误处理: