Integer和Double数据类型的输入验证

时间:2011-10-09 02:26:50

标签: c++ validation input strtod

因为我在发布此问题时代码中存在错误,所以这不是一个好问题。我已经删除并用一个正确解决方案的链接替换它。

Correct Solution for Input Validation

2 个答案:

答案 0 :(得分:1)

这里最简单的解决方法是对你的'cin.getline()'调用设置一个限制,这样它就不会溢出你的缓冲区,或者切换到使用字符串类或类似的一些:

#include <iostream>
#include <errno.h>

int main() {
  std::string buffer;
  double value;
  char* garbage = NULL;

  while (true) {
    std::cin >> buffer;
    std::cout << "Read in: " << buffer << std::endl;
    if (std::cin.good())
    {
      value = strtod(buffer.c_str(), &garbage);
      if (errno == ERANGE)
      {
          std::cout << "A value outside the range of representable values was returned." << std::endl;
          errno = 0;
      }
      else
      {
        std::cout << value << std::endl << garbage << std::endl;
        if (*garbage == '\0')
          std::cout << "good value" << std::endl;
        else
          std::cout << "bad value" << std::endl;
      }
    }
  }
  return 0;
}

答案 1 :(得分:1)

cin.getline(buffer,'\ n');  &lt; - 错了,需要缓冲区大小。

cin.getline(buffer, 10000, '\n');