c++ - 如何使用 cin.fail() 在 C++ 中验证字符串?
问题描述
我正在尝试验证应该是字符串的输入是否作为字母字符串而不是数字输入。这是我所拥有的:
// Manufacturer
cout << "Enter the manufacturer: " << endl;
string newManufacturer;
cin >> newManufacturer;
while (cin.fail()) {
cout << "Error! Invalid input." << endl;
cout << "Enter the manufacturer: " << endl;
cin.clear();
cin.ignore(256, '\n');
cin >> newManufacturer;
}
obj1.setManufacturer(newManufacturer);
解决方案
我建议您使用以下代码:
#include <iostream>
#include <string>
#include <cctype>
int main()
{
std::string newManufacturer;
for (;;) //infinite loop
{
//prompt user for input
std::cout << "Enter the manufacturer: " << std::flush;
std::cin >> newManufacturer;
//fall through to label "input_invalid" if stream extraction failed
if ( !std::cin.fail() )
{
//verify that input consists completely of letters
for ( char &c : newManufacturer )
{
if ( !std::isalpha( c ) )
goto input_invalid;
}
break;
}
input_invalid:
//print error message and prepare stream for next input attempt
std::cout << "Error! Invalid input." << std::endl;
std::cin.clear();
std::cin.ignore( 256, '\n' );
}
std::cout << "The input is valid." << std::endl;
//do something with the input
}
goto
通常,如果可以避免使用语句,则不应使用它们。但是,我认为没有办法避免它,而不会导致大量的代码重复。
推荐阅读
- api - 如何将isValid方法的contextValidation参数从父级传递给子级
- token - 尝试编译solidity代币合约但不断出现编译错误
- javascript - 如何连接数组中的两个或多个对象?Javascript
- ruby - 我可以调用一个方法,但它对于 Object#method 方法是不可见的——这怎么可能?
- python - Scikit - 将 roc_curve 与训练有素的神经网络一起使用的问题
- c# - 如何使用 schema.ini 文件将数据从文本文件播种到使用 Entity Framework 核心的数据库
- botframework - 尝试创建 Orchestrator 快照时出现间歇性
- java - 使用带有YaHP Html to Pdf Converter的java将带有日语字符的HTML转换为PDF的问题
- c# - 在我的应用程序中查看跟踪 asp.net 核心捕获的选项有哪些?
- python - 在 Django ORM 中与其他参数 LEFT JOIN