限制用户仅在C ++中输入实数

时间:2013-07-26 09:49:45

标签: c++

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

示例:

双号; cin>>数;

它不接受输入,如:'12add','abcd'等...

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

10 个答案:

答案 0 :(得分:2)

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

  1. 使用getline读取一行
  2. 解析并理解该行
  3. 如果行无效,请向用户提供错误并转到1
  4. 这很好,很常见。它虽然使用动态内存。另一种选择是:

    1. 像往常一样使用cin >> value;
    2. 检查cin.fail()以查看输入是否已正确读取(同时检查cin.eof()
    3. 如果失败,请忽略所有输入,直到空格:

      char c;
      while (cin >> c)
          if (isspace(c))
              break;
      
    4. 这有一个额外的好处,就是在这样的错误输入中:

      abc 12.14
      

      你不要忽略整行,而只忽略abc

答案 1 :(得分:1)

我总是使用此代码来请求特定类型的输入(字符串和字符除外)。 想法是请求任何数字类型,并使用stringstream查看是否可以将其存储为请求的类型,否则,它将一直提示用户直到他输入请求的类型。

template <typename T> // will not work with strings or chars
T forceInputType_T() {
 T name;
 bool check = false;
 string temp;
 while (check == false) {
    cin >> temp;
    stringstream stream(temp);
    if (stream >> number) {
        check = true;
    } else {
    cout << "Invalid input type, try again..." << endl;
    }
}
return name;

}

如果要使用布尔值,则可以检查字符串中的每个字符是否包含数字,然后返回false并继续使用循环来请求有效输入!

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这是一些伪代码;

double num;

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

答案 5 :(得分:0)

您无法限制键盘上的用户类型。您可以将其作为std::string接受,并使用boost::lexical_cast将其转换为预期的数字类型,并捕获并处理boost::bad_lexical_cast例外。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

查看sscanf功能。

答案 8 :(得分: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);
}

请记住,在标题中包含正则表达式库。

答案 9 :(得分:0)

使用这个:

#include <conio.h>
#include <string>
#include <iostream>
using namespace std;
int main() {
    cout << "Input a positive whole integer: ";
    string currentInput;
    while (true) {
        char ch = getch();
        if (ch <= '9' and ch >= '0') cout << ch; currentInput += ch;
        // Handle other keys (like backspace, etc)
        else if (ch == '\r') cout << endl; break;
    }
}