J'ai écrit du code pour ajouter des livres à une bibliothèque.Lorsque j'ajoute les livres à la bibliothèque et essayer d'afficher les magasins IT (affichages) Rien dans la bibliothèque
Ici, je définis le nombre maximum de livres que la bibliothèque peut tenir à 100.
int Maxbooks = 100;
Vecteur MiniliBary (Maxbooks);
Lorsque je effactive le "(Maxbooks)", le code fonctionne bien. Mais je ne
Comprenez pourquoi? P>
#include <iostream> #include <vector> #include <string> using namespace std; //struct model a book struct book { string authorname; string bookname; }; //struct ends here //function to display number of books in the library void displayLibrary(vector <book> &cmini_library,int cnum_of_books); //function to add books to the library; void add (vector <book> &cminilibrary,book dummylibrary,int &num_of_books); int main() { int option; int curr_num_of_books = 0; //current number of books in the library int maxbooks = 100; //max number of books our library can hold vector<book> minilibrary(maxbooks); //minilibrary vector of max capacity 100 book dummylibrary; // a variable used to hold entries for a short period cout << "1.Display all books in the library" << endl; cout << "2.Add a book to the library" << endl; cout << "option entered: " << endl; cin >> option; switch (option) { case 2: add (minilibrary,dummylibrary,curr_num_of_books); displayLibrary(minilibrary,curr_num_of_books); break; } return 0; } void displayLibrary(vector <book> &cmini_library,int cnum_of_books) { for(int i=0;i<cnum_of_books;i++) { cout << "Book name: \t" << cmini_library[i].bookname << endl; cout << "Author: \t" << cmini_library[i].authorname << endl; } } void add(vector<book> &cmini_library,book dummylibrary, int &num_of_books) { int booksadded=0; // number of books added to the library cout << "How many books do you wish to add: "; cin >> booksadded; cin.ignore(1,'\n'); for(int i=0;i<booksadded;i++) { cout << "Book name: "; getline(cin,dummylibrary.bookname); cout << endl; cout << "Author: "; getline(cin,dummylibrary.authorname); cout << endl; cmini_library.push_back(dummylibrary); } num_of_books = num_of_books + booksadded; }
3 Réponses :
Les vecteurs sont similaires aux tableaux, mais la différence est qu'elles peuvent être redimensionnées de manière dynamique. C'est pourquoi, contrairement aux tableaux, vous pouvez initialiser un vecteur sans spécifier sa maxlimit (dans votre cas-maxbooks) p>
Veuillez vous reporter au Documentation sur la façon d'initialiser un vecteur dans différentes manières. P>
Ce que je veux dire, c'est quand j'initialise le vecteur, il ne stocke pas les livres que j'ajoute à la bibliothèque. Cependant, lorsque je supprimai l'initialisation, cela fonctionne bien
parce que Vous vouliez probablement: p> modifier (je ajoute mon propre commentaire pour augmenter visibilité):
L'ensemble de la question a commencé à avoir échoué à obéir à la règle principale: éviter la redondance à tout prix. D'une part, vous gardez votre comptage de livre comme vecteur
num_of_books code>. Donc, par exemple, vous ajoutez un livre, maintenant vous avez 101 livres, vous imprimez un livre (premier), qui est vide. Tandis que le livre ajouté est à l'index 100 (après ces 100 ajoutes initialement ajoutés).
num_of_books code> variable, d'autre part -
minilibiom code> contient tous les livres. Si vous avez sauté
num_of_books code> valeur et utilisez
minilibibli.Size () code>, le problème serait instantanément visible - vous recevrez 100 "vides" (nonInialisé) livres et dernier livre, que Vous avez entré. P> p>
En tant que mineur, mais futur conseil - éviter la redondance à peu près - tous les coûts. Votre problème ne se produirait jamais, si vous n'avez pas utilisé une source alternative de quantité de livres insérés. Si vous avez utilisé minIlibrary.Size () Code> Pour la quantité de livres insérée Vous verriez plus de 100 livres affichés (et 100 premiers livres "vides") et vous pourriez comprendre le problème instantanément. Garder la quantité de livres sous forme de deux valeurs (
minIlibrary.Size () code> et
num_of_books code> Vous avez gardé hors de l'arrêt.
Qu'est-ce que @ radosławcybulski mentionné est un très bon point. Toutes les variables qui détiennent le nombre de livres doivent être éliminées à la place, le vecteur connaît sa taille. Utiliser cela au lieu d'un compte. Aussi, vous voudrez peut-être examiner la plage basée sur des boucles pour l'itération du vecteur: .cPPreference.com / W / CPP / Langue / gamme - pour
int maxbooks=100; vector <book> minilibrary(maxbooks); these lines created vector with 100 books, each book was created by default constructor.Now, when you add new book into vector, its size is 101, but displayLibrary takes 1 as the number of books to be printed, and you print minilibrary[0] - defaulted book, not the book you added i.e. minilibrary[100].You should create minilibrary as empty vector. Then, you can push books into it.
1) " Pourquoi cela se produit-il avec des vecteurs i>" Que se passe-t-il avec des vecteurs? On ne sait pas ce qui est le comportement réel et le comportement que vous attendiez? 2) " int Maxbooks = 100; Vecteur Minilibrary (Maxbooks); I>" Êtes-vous, par hasard, confus par le comportement de
std :: vecteur :: vecteur (int) code>
et voulait que ce soit juste ce questd :: vecteur :: réserve code>
fait?quand j'initialise le vecteur avec "int Maxbooks", le code ne fonctionne pas comme prévu
Vous modifiez la taille du vecteur lorsque vous appelez
push_back code>, vous n'avez pas besoin de spécifier la taille non-zéro lorsque le vecteur est créé (en fait, il est faux de le faire).
@Eyrammichael " Quand j'initialise le vecteur avec" int Maxbooks ", le code ne fonctionne pas comme prévu i>" Cela ne fournit aucune information supplémentaire. Par exemple: Quelles sont vos attentes et que font le code, qu'il ne répond pas à ces attentes?