Проверка ввода для типов данных Integer и Double
Поскольку при написании этого вопроса в коде произошла ошибка, это не очень хороший вопрос. Я удалил и заменил его ссылкой на правильное решение.
2 ответа
Самое простое исправление здесь - это установить ограничение на ваш вызов 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;
}
cin.getline(буфер, '\n'); <- неверно, нужен размер буфера.
cin.getline(buffer, 10000, '\n');