Wątek przeniesiony 2018-01-17 22:28 z C/C++ przez kq.

indeks w vectorze

0

Cześć, piszę program na zadanie domowe. Mam problem z funkcją 'void takeb(vector <Book> library)". Chciałbym zrobić taką procedure która po podaniu numery ksiązki z 'bazy ksiazek' zmienia zmienną 'able' na 'false'. Co powinienem wpisać w 'cin' i jak powinna wyglądać deklaracja 'bool' bo wyskakują mi błędy. WELP

#include <iostream>
#include <vector>
#include <windows.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;



struct Book
{
	
	string title;
	string author;
	int isbn;
	int nr;
	int amount;
	bool able;
};
vector <Book> library;

void display(vector<Book> library)
{
	for (int i = 0; i < library.size() ; i++)
	{
		cout << " nr: " << library[i].nr << endl;
		cout << " title: " << library[i].title << endl;
		cout << " author: " << library[i].author << endl;
		cout << " nr ISBN: " << library[i].isbn << endl;
		cout << " ilosc: " << library[i].amount << endl;
		if(library[i].able = true)
		cout << " pozycja dostepna" << endl;
		else 
		cout << " pozycja niedostepna" << endl;
        
	}
	cout << "\n" << endl;
}
void takeb(vector<Book> library)
{
	
	cout << " wypozyczanie ksiazek " << endl;
	cout << " wprowadz nr ksiazki z bazy " << endl;
	    
}

int wybor;
int main() 
{
	vector <Book> library;
    for(;;)
	{
	
	cout << " WITAJ W BIBLIOTECE " << endl;
	cout << "--------------------" << endl;
	cout << "----MENU GŁOWNE-----" << endl;
	cout << " 1. DODAJ KSIAZKE DO BAZY " << endl;
	cout << " 2. WYSWIETL WSZYSTKIE" << endl;
	cout << " 3. WYSWIETL DOSTEPNE" << endl;
	cout << " 4. ZWROC KSIAZKE" << endl;
	cout << " 5. WYPOZYCZ" << endl;
    cout << " 6. WYJDZ" << endl;
	cout << " WYBIERZ: "; cin >> wybor;
    
    switch(wybor)
    {
    	case 1 : 
                {
                	Book b;
	                b.title;
	                b.author;
	                b.isbn;
	                b.amount;
	                b.nr ++; 
                    system("cls");
				    cout << "---DODAJ KSIAZKE DO BAZY---" << endl;
                    cout << " 1. PODAJ TYTUL: "; 
					cin >> b.title;
	                cout << " 2. PODAJ AUTOR: "; 
					cin >> b.author;
	                cout << " 3. PODAJ ISBN: "; 
					cin >> b.isbn;
	                cout << " 4. PODAJ ILOSC: "; 
					cin >> b.amount;
				    b.able = true;
					library.push_back(b);
				
				}    	
    	break;
    	case 2 :
    		    {
    		    	system("cls");
					cout << "---WSZYSTKIE KSIAZKI W BAZIE---" << endl;
    		    	cout << endl;
					display(library);
					getchar();
					
					
				}
        break;
		case 3 :
		        {
		        	
		        	
			    }  
   
   
   
   }
   }
	return 0;
}
0

Dobra, usunąłem poprzednią odpowiedź, ale już się znalazł błąd.
if(library[i].able = true) - to jest źle, bo masz przypisanie zamiast porównania.

W funkcji takeb chcesz mieć library[index].able = false po prostu, o index odpytaj cin, chociaż IMHO to powinno być argumentem funkcji.
W switchu masz zbędne klamry pod case'ami. Formatowanie kodu też jest brzydkie.

Edit:
Chyba nie powinienem w nocy pisać, albo Ty powinieneś przemyśleć to co napisałeś, jeszcze nie jestem pewny:

Book b;
b.title;
b.author;
b.isbn;
b.amount;
b.nr++; 

Po pierwsze b.title do b.amount są zbędne, po drugie trzeba tu wiekszego magika ode mnie od C++, ale zakładałbym, że b.nr++ jest UB, bo nigdzie nie zainicjalizowałeś tego pola.

0
if(library[i].able == true)

Takie coś jest nadmiarowe. Wyrażenie musi sprowadzać się do wartości logicznej, pole able samo w sobie jest taką wartością, więc wystarczy podać samą jego nazwę:

if(library[i].able)

Do sprawdzenia czy pole zawiera false, można użyć operatora == i wartości false:

if(library[i].able == false)

ale można też skorzystać z negacji:

if(!library[i].able)
0
furious programming napisał(a):

Do sprawdzenia czy pole zawiera false, można użyć operatora == i wartości false:

if(library[i].able == false)

ale można też skorzystać z negacji:

if(!library[i].able)

Tak szczerze, to ten wykrzyknik jest słabo widoczny między ( a l...

1 użytkowników online, w tym zalogowanych: 0, gości: 1