
Помогите решить задачу по C++ с структурами Создать структуру Книга с элементами Автор, Название,
Год издания. Заполнить массив элементов типа Книга. Написать функцию для нахождения книги с заданным годом издания.#include #include #include #include #include #include using namespace std;class Book{private: char author[100]; char title[100]; int year;public: int sravi(int y) { if (year == y) return 0; else return 1; } void get(void) { cout << "Автор : " << author << endl; cout << "Название : " << title << endl; cout << "Год : " << year << endl; } void set(void) { cout << "Введите автора книги : " << endl; cin.get(); cin.getline(author, 100); cout << "Введите название книги : " << endl; cin.getline(title, 100); cout << "Введите год издания книги : " << endl; cin >> year; }};class Book* library;int main(void){ int ans, i = 0; setlocale(LC_ALL, "Russian"); SetConsoleCP(1251); SetConsoleOutputCP(1251); do { cout << "Есть книги (1)-да, (2)-нет" << endl; cin >> ans; if (ans == 1) { library = (class Book*)realloc(library, (i + 1) * sizeof(class Book)); library[i].set(); i++; } else if (ans == 2) { int a_year; cout << "Введите год" << endl; cin >> a_year; for (int k = 0; k < i; k++) { if (library[k].sravi(a_year) == 0) library[k].get(); } } } while (1); return 0;}

Ответы на вопрос

Ответ:
#include <iostream>
#include <string>
using namespace std;
struct Book {
public:
string author;
string title;
int year;
};
int getBookByYear(Book books_arr[],int target_year) {
for (int i = 0; i < sizeof(books_arr);i++) {
if (books_arr[i].year == target_year) {
return i;
}
}
return -1;
}
int main()
{
}



Код, который вы предоставили, содержит некоторые проблемы, связанные с динамическим выделением памяти и использованием realloc
. Рекомендуется использовать вектор (std::vector
) вместо массива и избегать использования realloc
. Вот исправленная версия кода с использованием вектора:
cpp#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Book {
string author;
string title;
int year;
void get() {
cout << "Автор: " << author << endl;
cout << "Название: " << title << endl;
cout << "Год издания: " << year << endl;
}
};
int main() {
vector<Book> library;
int ans;
do {
cout << "Есть книги? (1) - да, (2) - нет" << endl;
cin >> ans;
if (ans == 1) {
Book book;
cout << "Введите автора книги: ";
cin.ignore();
getline(cin, book.author);
cout << "Введите название книги: ";
getline(cin, book.title);
cout << "Введите год издания книги: ";
cin >> book.year;
library.push_back(book);
} else if (ans == 2) {
int a_year;
cout << "Введите год издания: ";
cin >> a_year;
for (const auto& book : library) {
if (book.year == a_year) {
book.get();
}
}
}
} while (true);
return 0;
}
В этом коде я исправил структуру Book
, заменив массивы символов на объекты std::string
для автора и названия книги. Теперь вы можете использовать функции ввода-вывода из стандартной библиотеки, чтобы избежать проблем с cin.getline()
. Кроме того, вместо realloc
я использовал вектор std::vector
, который самостоятельно управляет динамическим выделением памяти.
После внесения этих изменений код будет работать должным образом, позволяя вводить книги и искать книги по заданному году издания.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili