【问题标题】:function triggering before value is given给定值之前触发的函数
【发布时间】:2020-03-14 12:39:23
【问题描述】:

这个问题的名字可能不好,因为我不知道这里发生了什么。但我有一个名为str2int() 的函数,用于检查用户输入值是否为数字。无论出于何种原因,它都会在给出任何输入之前触发。 这是在我的main() 中调用的:

  std::string stringSKILL;
  for(int i = 0; i < 5; i++) {
    switch(i) {
      case 0:
        cout <<"\n\nStrength (How strong you are)";
        cout <<"\nHow many points (you have " << total_SKILL_points << " left): ";
        std::getline(std::cin,stringSKILL);
        Strength = str2int(stringSKILL);
        if(str2int_i == 0) {
          Strength = 0;
          i--;
          str2int_i++;
          break;
// }'s later in program

这是函数:

// Check if user input is a number
int str2int(std::string &str) {
  std::stringstream ss(str);
  int num;
  ss >> num;
  if(ss) { // error handling
    return num;
  }
  else {
    cout <<"\n\nPlease Enter a Number!";
    str2int_i--;
  }
}

但是当这个程序运行时,“请输入一个数字”已经打印出来了,没有给出任何输入。之后,一切正常。 这是为什么呢?

【问题讨论】:

  • std::getline()之后尝试std::cin.ingore()
  • 你在调试过程中观察到了什么?

标签: c++ getline stringstream


【解决方案1】:

尝试在 getline 之后清除缓冲区,以防止缓冲区中的任何值用作输入(可能是换行符)

std::getline(std::cin,stringSKILL);
std::cin.ingore() 

应该解决它。否则,您应该发布其余代码!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多