Проверка ввода для типов данных Integer и Double - PullRequest
0 голосов
/ 09 октября 2011

Поскольку при написании этого вопроса в коде произошла ошибка, это не очень хороший вопрос. Я удалил и заменил его ссылкой на правильное решение.

Правильное решение для проверки входных данных

Ответы [ 2 ]

1 голос
/ 09 октября 2011

cin.getline (буфер, '\ n'); <- неверно, нужен размер буфера. </p>

cin.getline(buffer, 10000, '\n');
1 голос
/ 09 октября 2011

Самое простое исправление здесь - установить ограничение на ваш вызов 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;
}
...