我写了下面的函数:
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/