c++ - C ++验证用户输入是单个字符
问题描述
optionTest 是一个字符串,而 option 是一个字符。当我输入“ee e”之类的内容时,就会出现问题。尽管我忽略/清除了最后一个“e”。只要输入不是单个字符,我就希望验证循环运行。
cin >> optionTest;
while (optionTest.length() != 1) {
cout << "Invalid input. please try again." << endl;
cin.ignore();
cin.clear();
//receive option
cin >> optionTest;
}
option = optionTest[0];
解决方案
来自std::basic_istream::ignore()
的描述:
basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );
它从流中提取字符并丢弃它们,直到发生以下任何一种情况:
count
字符被提取。count
在等于的特殊情况下禁用此测试std::numeric_limits<std::streamsize>::max()
由于您使用空括号调用它,count
因此为 1,因此仅提取一个字符(在您的情况下为空格字符)。
尝试cin.ignore(std::numeric_limits<std::streamsize>::max())
(或至少任何足够大的数字)。
推荐阅读
- python-3.x - 将特定于节点的计数器添加到单链表
- c# - Image is distorted after updating its sprite during runtime (Unity 2019)
- docker - snap 和 gitlab-CI:错误:无法与服务器通信:发布 http://localhost/v2/snaps/hello-world
- css - 屏幕缩小时CSS视频背景不会消失
- c++ - 如何使数组调用另一个类中的函数
- swift - 将整行附加到二维数组
- python - 在 Python 中初始化对象类时是否应该运行函数?
- wpf - 如何在 Xaml 中同时设置动态和静态资源?
- ruby-on-rails - 需要其他宝石的宝石(宝石依赖问题)
- objective-c - AFNetworkReachabilityManager:如果我设置 setReachabilityChangeBlock 两次或更多次会发生什么?