C++ C++;真布尔与双输入
//前 如何检查布尔值和双精度输入是否正确 你能告诉我以下几点吗:C++ C++;真布尔与双输入,c++,boolean,double,C++,Boolean,Double,//前 如何检查布尔值和双精度输入是否正确 你能告诉我以下几点吗: bool ex; cin >> ex; try { if (ex != 0 && ex != 1) { cin.clear(); throw ex; } } catch (bool ex) { //redo process } boolex; 而(1){ 如果(cin>>ex){ 如果(ex==1 | | ex==0) 打破 }否则{ 您认为如何输入布尔值?“是”、“1”
bool ex;
cin >> ex;
try {
if (ex != 0 && ex != 1)
{
cin.clear();
throw ex;
}
}
catch (bool ex)
{
//redo process
}
boolex;
而(1){
如果(cin>>ex){
如果(ex==1 | | ex==0)
打破
}否则{
您认为如何输入布尔值?“是”、“1”、“1”、“ja”、“ja”、“sí”、“true”、“OK”、“y”等等
嗯,您需要的是一个解析器,它解析输入并决定给定的输入字符串是否为布尔值。您如何定义“正确的”输入?你的代码如何与double关联?我不理解double在这里是如何关联的。我的意思是,如果变量是bool,那么用户输入的是bool而不是单词。示例中没有double,但问题适用于它。你写得非常混乱。如何检查用户的输入是否适合变量t键入。这样用户就不会意外地弄乱程序。有一个内置函数可以执行while(cin.get()!='\n');
。它的名称是cin.ignore(numeric\u limits::max(),'\n'))
.Hmm,我想它看起来不太好看,但如果出现诸如文件结尾之类的I/O错误,它不会导致无限循环。当然,如果您有特定的语言,可以打开std::ios_base::boolalpha
和imbue()
一个合适的std::locale
。默认情况下,将使用true
和false
。如果您只想支持一种语言,可以在std::numpunt
中设置字符串。如果您想支持多种语言,则需要在std::num\u get
中提供解析。powerf的使用总是令人惊讶的ul std流的隐藏宝石是-假设区域设置功能得到正确实现。;)然而,在给定的情况下,我们有一个用户被要求在控制台上输入一个布尔值(“是”或“否”可能?)或一个数字。给定的问题也是一个UI设计问题。您(作为程序员)会怎么做明确你希望从用户那里得到什么以及你将如何实现它?:-)在UI中,我可能会有一个复选框并忽略它。如果你有一个文本界面,你可以合理地打印问题(是/否):
。正如我所说,您可以让代码接受多个值,但您需要提供一个合适的std::num\u get
方面,它覆盖适当的do\u get()
函数。此外,我不知道有任何标准库错误地使用了std::locale
函数!据我所知,它在任何地方都可以实现。要像locale这样做,就不必支持多种字符类型。
bool ex;
while (1) {
if (cin >> ex) {
if(ex ==1 || ex== 0)
break;
} else {
cout<<"Error !"<<endl;
cin.clear();
while (cin.get() != '\n') ;
/* Edit: Use cin.ignore(numeric_limits<streamsize>::max(), '\n');
as suggested by Ben Voigt
header file - limits
*/
}