gpt4 book ai didi

c++ - 为什么下面的验证码在我输入1.w的时候卡在cin.ignore上,输入w.1的时候就死循环了?

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:44 25 4
gpt4 key购买 nike

为什么下面的验证码在我输入的时候卡在cin.ignore上1.w输入w.1就进入死循环?
我正在尝试创建验证数字输入的代码。我已经根据其他帖子中给出的建议创建了代码,但我仍然遇到问题。

//The code is validation code used to check if input is numerical (float or integer). 
#include <iostream>
#include <string>
#include <limits> // std::numeric_limits
using namespace std;
int main ()
{
string line;
float amount=0;
bool flag=true;

//while loop to check inputs
while (flag){ //check for valid numerical input
cout << "Enter amount:";
getline(cin>>amount,line);
//use the string find_first_not_of function to test for numerical input
unsigned test = line.find_first_not_of('0123456789-.');

if (test==std::string::npos){ //if input stream contains valid inputs
cout << "WOW!" << endl;
cout << "You entered " << line << endl;
cout << "amount = " << amount << endl;
}

else{ //if input stream is invalid
cin.clear();
// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}

return 0;
}

最佳答案

首先,'0123456789-.' 应该是 "0123456789-."(注意双引号)。前者是多字节字 rune 字。

当您输入 1.w 时:

  • 1cin>>数量 提取。
  • .wgetline
  • 提取
  • 流为空,所以忽略等待输入

当您输入 w.1 时:

  • cin>>amount 失败,failbit 已设置
  • getline 流坏时无法提取,所以 line 保持为空
  • test 等于 npos,所以我们永远不会进入 else block 来清除流
  • 从头再来一遍

关于c++ - 为什么下面的验证码在我输入1.w的时候卡在cin.ignore上,输入w.1的时候就死循环了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16117554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com