C ++:输入验证器函数

时间:2018-03-23 07:06:49

标签: 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;
}

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

1 个答案:

答案 0 :(得分:1)

正在发生的事情是流正在破碎。基本上,该程序看到一个角色进入一个不是一个角色并且变得怪异的东西,即UB。这是一个简单的修复程序,您可以在任何包含数据验证的初级书籍中找到它:

listRemoveMarkers = listCurrentPostsMarkers.Where(x =>
  !listLocations.Exists(y => y.Latitude == x.Position.Latitude 
                          && y.Longitude == x.Position.Longitude)).
  ToList();

这将测试流是否已损坏,清除该标志并忽略该行上的其余输入。