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
  */
  }