C++:输入验证器函数

标签 c++ c++14

我写了下面的函数:

void check(int* input){

do{
    std::cout<<"Enter integer!";
    std::cin>>*input;
}while(!std::cin);
}

我在主函数中使用它如下:

int main()
{
    int *k;
    k=new int;
    check(k);
    std::cout<<"Value of the k is:"<<*k<<"in address"<<k;
    return 0;
}

问题是当用户输入一些字符时,编译器不停地打印“输入整数!”,我不得不手动停止编译器。

最佳答案

正在发生的事情是流正在中断。基本上,该程序看到一个角色进入了一个不是角色的东西并且吓坏了,这就是 UB。这是一个简单的修复方法,您几乎可以在任何包含数据验证的入门级书籍中找到它:

#include <limits>

if(cin.fail())
{
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

这会测试流是否中断,清除标志并忽略该行的其余输入。

关于C++:输入验证器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49444181/

相关文章:

c++ - 声明 RValue 方法(例如 void opera() &&;) virtual C++1x 有意义

c++ - 在 C++ 中是否可以指定使用哪个删除运算符?

c++ - 从 std::vector 中删除多个对象?

c++ - 对其中包含类项的 vector 进行排序

c++ - 如何防止复制省略?

c++ - 线程 ID 在 std::thread 和 tbb::task_group 之间重用导致 OpenMP 中的死锁

C++ 从参数参数包创建 vector 或列表

c++ - 将 std::bind 应用到带有参数 <boost::asio::ip::tcp::socket> 的函数时出错?

c++ - 在 Lambda 捕获中构建 intializer_list<string>

c++ - 阻止进程使用 WMI 启动?