如何在拒绝浮点数和空格的同时接受整数输入?

时间:2019-04-28 19:03:21

标签: c++ validation input int

我有一个带有循环的菜单创建系统,用于检查输入。当输入是“ 2.4”或“ 2 4”之类的东西时,它接受“ 2”作为第一个输入,然后我猜“ 4”被存储在缓冲区中,并自动作为下一个输入传递而无需等待。

这两个解决方案是我能找到的最接近的解决方案,但是我不知道如何实现第一个(甚至不了解他们使用的大部分内容),而第二个仍然接受非整数。 / p>

Accept only integer to input

How to make cin take only numbers

相关代码(抱歉,仍在尝试确定格式):

int menu(std::vector <std::string> options) //menu creation
{
int input;             //user selection
bool check = false;    //check for valid input
.
.
.
  while(!check)
  {
    std::cin >> input;

    if(std::cin.fail() || input <= 0 || input > static_cast<int>(options.size()))
    {
      std::cin.clear();
      std::cin.ignore();
      std::cout << wrongInput << std::endl;
    }
    else
    {
      check = true;       //change flag for valid input
    }
  }
return input;
}

我希望循环完全拒绝任何非整数。我尝试了一个循环,该循环将顺序检查每个字符,以便它接受多位数字整数,然后在空格“。”上失败。或性格,但非常笨拙,仍然无法正常工作。

1 个答案:

答案 0 :(得分:0)

您可以阅读一行,将其放入字符串流,然后使用std::nows确保不允许使用空格。要确保整数后没有剩余字符,只需检查EOF。

#include <iostream>
#include <sstream>
#include <string>

int main() {
  std::string line;
  std::stringstream temp;
  std::getline(std::cin, line);
  temp << line;
  int value;
  temp >> std::noskipws >> value;
  if(!temp.fail() && temp.eof()) {
    std::cout << "Parsed a 'pure' int: " << value << std::endl;
  } else {
    std::cerr << "Expected <int>" << std::endl;
  }
}

它将允许123598324,但不允许<space>123123.4