Стоит такая задача: есть переменная типа int, которую должен ввести пользователь. Как поставить защиту "от дурака", т.е. отрезать ситуацию, когда пользователь вводит абы что с клавиатуры, это абы что записывается в переменную int и "ложит" всю программу. Есть ли какие-то стандартные методы формирования потока ввода. чтобы в переменную int не записывались какие попало символы?
У плюсовой библиотеки ввода-вывода есть очень запутанная система для обработки ошибок. Можете начать читать тут, ну и далее по ссылкам. Правда в ней сам черт ногу сломит. Например условие std::cin.good() != std::cin.bad()
не всегда истино.
Вот вроде бы правильный код, который делает то что вам нужно:
#include <iostream>
#include <limits>
int main() {
while (1) {
int number;
std::cout << "Enter a number: ";
std::cin >> number;
if (std::cin.eof()) {
std::cout << std::endl << "Terminating." << std::endl;
return 0;
} if (std::cin.fail()) {
std::cout << "You've entered something wrong." << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} else {
std::cout << "You've entered " << number << std::endl;
}
}
}
Для преобразования строки в число можно использовать библиотеку boost::lexical_cast
. У нее есть особенность: при невозможности преобразования выбрасывается исключение. Причем при преобразовании строки в число это происходит всегда, когда в строке есть символы, отличные от тех, что должны быть в записи числа.
Можно на С++ записывать данные от пользователя в строку. И уже в строке проверять, нет ли в ней чего лишнего кроме цифр, так же можно проверить не выходил ли за диапазон int`a. Ну а потом строку переводить в int.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Опять у меня идиотский вопрос (простите, но впадаю в старческий маразм, "бабушка ничего не помнит")
Привет всем участникам форума! В прошлый раз я задавал вопрос по поводу генерации пилы с использованием СИ на AVRКроме @vanyamelikov мне никто не отвечал,...
Всем приветОбъясните пожалуйста, как добавить один односвязный список в другой