
C/C++
Использование неинициализированной памяти
Делаю простую программку на С++: нужно вывести, сколько в месяце дней, в зависитимости от его порядкового номера, но нужно учесть то, что год может быть високосным или не високосным (вводим с клавы). Ошибка на скрине и в самой теме вопроса (подчёркивает переменную b).


#include <iostream>
using namespace std;
class Yaer {
public:
Yaer() : year(1900) {}
Yaer(int year) : year(year) {}
int days(int month) {
if (month < 1 || month > 12) return -1;
if (month == 2 && is_leap()) return 29;
return box[month];
}
private:
int year;
inline static const int box[] = { 365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
bool is_leap() {
bool result;
if (year % 4 != 0) result = false;
else if (0 == year % 400) result = true;
else if (0 == year % 100) result = false;
else result = true;
return result;
}
};
int integer(const char* msg) {
cout << msg;
int value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
int main() {
system("chcp 1251 > nul");
while (true) {
auto year = integer("Введите год: ");
auto month = integer("Введите номер месяца: ");
Yaer date(year);
auto days = date.days(month);
if (days > 0) cout << "Количество дней в месяце: " << days << '\n';
else puts("Месяца с таким номером не существует!");
puts("");
}
}
using namespace std;
class Yaer {
public:
Yaer() : year(1900) {}
Yaer(int year) : year(year) {}
int days(int month) {
if (month < 1 || month > 12) return -1;
if (month == 2 && is_leap()) return 29;
return box[month];
}
private:
int year;
inline static const int box[] = { 365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
bool is_leap() {
bool result;
if (year % 4 != 0) result = false;
else if (0 == year % 400) result = true;
else if (0 == year % 100) result = false;
else result = true;
return result;
}
};
int integer(const char* msg) {
cout << msg;
int value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
int main() {
system("chcp 1251 > nul");
while (true) {
auto year = integer("Введите год: ");
auto month = integer("Введите номер месяца: ");
Yaer date(year);
auto days = date.days(month);
if (days > 0) cout << "Количество дней в месяце: " << days << '\n';
else puts("Месяца с таким номером не существует!");
puts("");
}
}
После int b; должен быть cin >> b;
Но вообще есть формулы вычисления дней в месяце заданного года.
https://tproger.ru/problems/days-in-month-formula/
Но вообще есть формулы вычисления дней в месяце заданного года.
https://tproger.ru/problems/days-in-month-formula/
Андрей Краковский
спасибо)
Андрей Краковский
дело в том, что нужно использовать именно switch, так как это было обязательно, потому что так написано в методичке
Есть вариант позамысловатее!
Похожие вопросы
- Добрый день. Нужна помощь в реализации динамических структур. Нужно написать дек с использованием malloc.
- Указатели. Программирование с использованием динамических двухмерным масивов.
- C++ библиотека fstream. при использовании Кириллицы изменяется кодировка в создаваемом файле..
- C++ и динамическая память: это приемлемо?
- Если приложение вызывает утечку памяти, то при завершение работы приложения динамическая память очиститься или нет?
- Устройство статических и динамических массивов в оперативной памяти (...)
- Программирование на C++ с использованием динамического массива
- Каковы преимущества и недостатки использования "ДЕК"
- C++ программирование с использованием динамических двумерных массивов
- В чём смысл использования классов?