Я хотел сделать программу «високосного года» как практику.
Это мой код:Ошибка при проверке типа
#include <iostream>
#include <string>
int main(){
int year;
std::string flag01;
do {
std::cout << "Input year: ";
std::cin >> year;
//check for int input
while (std::cin.fail()){
std::cout << "Oops..." << std::endl << "I failed to get a year..." << std::endl << "Try again?";
std::cin.clear();
std::cin >> year;
}
if (year % 4 == 0 && year % 100 != 0 && year != 0)
std::cout << "the year " << year << " is a leap year.\n";
else
std::cout << "the year " << year << " is not a leap year.\n";
std::cout << "Would you like to input another? yes/no \n";
do {
std::cin >> flag01;
if (flag01 != "yes" && flag01 != "no")
std::cout << "please only insert yes or no\n";
} while (flag01 != "no" && flag01 != "yes");
} while (flag01 != "no");
return 0;
}
Но я не могу сделать ту часть, где он проверяет, является ли то, что вы вводите это int
или нет, работа. Я не знаю, что я делаю неправильно.
Когда я запускаю его и ввести char
или string
он идет в бесконечный цикл и продолжает печатать линию 11.
Я видел std::cin.fail
и std::cin.clear
здесь: Checking input value is an integer
Пожалуйста, помогите и спасибо.
Теперь это работает так спасибо! Еще один вопрос; 'numeric_limits' и' streamsize' находятся в 'std', но' max() 'тоже то же самое ?. Если ответ слишком велик, где я могу его прочитать? – axxooss
'max()' является функцией-членом 'std :: numeric_limits', которая возвращает максимальное значение для данного типа шаблона' std :: streamsize'. Используя максимальный поток, гарантируется, что весь поток очищается. – Unimportant
Я получаю это сейчас. Еще раз спасибо! – axxooss