2013-07-26 39 views
1

如何限制用户只能在C++程序中输入实数?限制用户只能在C++中输入实数

实施例:

双号; cin >>编号;

,它不会接受像输入:“12add”,“ABCD”等等......

可有人指导我吗?使用bool值。 谢谢!

回答

0

不幸的是,你不能避免它...你可以接受一个字符串作为输入,并解析字符串(也许与正则表达式)的正确性。

0

您可以检索您的数据为std::string,然后使用标准字符串转换函数之一来查看内容是否符合您的期望。

0

这是一些伪代码;

double num; 

while(num != realNum) //check input is valid 
{ 
    cin >> num; 
} 
.... 
+2

sudo =“** S ** uper ** U ** ser ** DO **”(或可能是“** S ** ubstitute ** U ** ser ** DO **”。Pseudo =“假”。 – BoBTFish

0

您无法限制键盘上的用户类型。您可以接受它std::string并使用boost::lexical_cast将其转换为您的预期号码类型并捕获并处理boost::bad_lexical_cast异常。

2

您无法强制用户输入正确的信息。但如果以前无效,您可以要求他们提供另一个输入。有不同的程序可以这样做。是下列其中一项:

  1. 使用getline读取线
  2. 解析和理解线
  3. 如果线是无效的,给错误的用户并转到1

这是正常的而且很常见。它使用动态内存。另一种选择是:

  1. 使用cin >> value;就像你通常做
  2. 检查cin.fail(),看是否输入正确读取(检查cin.eof()也)
  3. 如果失败,忽略所有输入,直到空白:

    char c; 
    while (cin >> c) 
        if (isspace(c)) 
         break; 
    

这有一个额外的好处,在这样的错误输入:

abc 12.14 

你不要忽略整条线,而只是abc

0
double number 
if (cin >> number) { 
    do_stuff_with(number); 
} else { 
    std::cerr << "That wasn't a number!"; 
} 
0

您可以使用正则表达式来解决它

double inputNumber() 
{ 
    string str; 
    regex regex_double("-?[0-9]+.?[0-9]+"); 
    do 
    { 
     cout << "Input a positive number: "; 
     cin >> str; 
    }while(!regex_match(str,regex_double)); 

    return stod(str); 
} 

请记住,包括头的正则表达式库。