c++ - 如何在拒绝浮点数和空格的同时接受整数输入?
问题描述
我有一个带有循环检查输入的菜单创建系统。当输入类似于“2.4”或“2 4”时,它接受“2”作为第一个输入,然后我猜“4”被存储在缓冲区中并自动作为下一个输入传递而无需等待。
这两个解决方案是我能找到的最接近的解决方案,但我不知道如何实现第一个(甚至不了解他们使用的大部分内容),而第二个仍然接受非整数。
相关代码(抱歉,仍在尝试找出格式):
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;
}
我希望循环彻底拒绝任何非整数。我尝试使用一个循环来按顺序检查每个字符,以便它接受多位整数,然后在空格上失败,“。” 或字符,但它非常笨拙,仍然无法正常工作。
解决方案
您可以读取一行,将其放入字符串流中,然后使用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;
}
}
它将允许123
,598324
但<space>123
不允许123.4
推荐阅读
- pine-script - 解释 tradingview 松脚本自引用变量值
- python-3.x - 使用 Twitter API 发送直接消息不起作用
- r - 如何将临时 _main.Rmd 文件保存在 bookdown 中(没有错误时)
- javascript - FORM : 签入 javascript
- ruby-on-rails - nil:NilClass 的未定义方法“每个”。实例变量不起作用
- python - 将字符串作为参数解析时,sqlite中的“没有这样的列”
- flutter - Flutter:具有不同填充和描边颜色的自定义 Painter 绘制路径
- java - BasePage 元素如何启动
- java - 在使用 Docker Compose 的 Spring 应用程序中是否有任何端口映射特定功能?
- python - AttributeError:“dict”对象没有属性“split”