#include <iostream>
using namespace std;
struct XLivro {
string titulo;
string autor;
int codigo;
float preco;
};
int main() {
int tamanho;
XLivro *livro;
livro = new XLivro[tamanho];
int i = 0;
char op;
do{
cout << "\n \n \n \t \t******** MENU OPERACOES ********* \n";
cout << "\t\t I - Incluir livro \n";
cout << "\t\t L - Listar nome dos livros\n";
cout << "\t\t A - Procurar livro por autor\n";
cout << "\t\t T - Procurar livro por titulo\n";
cout << "\t\t M - Calcular a media de preco dos livros\n";
cout << "\t\t S - Para sair\n";
cout << "\t \t********************************* \n";
cout << "\t\t Digite sua opcao:";
cin >> op;
system("cls");
if(op == 'i'){
cout <<"\n-----Incluir livro------\n";
cout<<"Titulo: ";
cin >>livro[tamanho].titulo;
cout<<"Autor: ";
cin >>livro[tamanho].autor;
cout<<"Codigo: ";
cin>>livro[tamanho].codigo;
cout<<"Preco: ";
cin>>livro[tamanho].preco;
cout << "\n-----------------------------\n";
}
}while(op != 's');
system("PAUSE");
return 0;
}
Ele da um erro e trava quando eu testo o cadastrar livro… podem me ajudar?
Ele compila, mas quando aperto i para inserir um livro ele abre la titulo, eu digito o titulo e ao invez dele pular para autor que é o proximo dado a ser cadastrado, ele trava… Livros.exe que é como eu salvei parou de funcionar… fechar programa.
Ataxexe
Setembro 11, 2013, 2:14pm
#4
int tamanho;
XLivro *livro;
livro = new XLivro[tamanho];
Você não inicializou a variável tamanho .
Também seria melhor usar um vector<shared_ptr><Livro>> do que um ponteiro para livros.
Inicializei sim, está ali em cima
int tamanho;
XLivro *livro;
livro = new XLivro[tamanho];
int i = 0;
não pode ser feito com ponteiro ainda, tem que ser feito dessa forma a pedido do professor, ele vai entrar em ponteiro agora.
Você está usando ponteiros. Isso aqui, é a criação de um ponteiro:
Ali você declarou a variável tamanho, mas não a inicializou. Para inicializar, precisa atribuir um valor:
como faço para ela ser dinamica e nao estatica?
Ataxexe
Setembro 11, 2013, 3:48pm
#9
Utilize um vector<shared_ptr>>, tal qual o Vini escreveu.
Utilize um vector<shared_ptr>>, tal qual o Vini escreveu.[/quote]
Esse vector ainda implementa um coletor de lixo por contagem de referência com shared_ptr. É a melhor solução, mas se for para treinar ponteiros tem que ser daquela forma.
#include <iostream>
using namespace std;
struct TLivro{
string titulo;
string autor;
string codigo;
float preco;
};
const int n = 2;
void LerLivro(TLivro &d){
cout <<"\n-----Incluir livro------\n";
cout<<"Titulo: ";
cin >> d.titulo;
cout<<"Autor: ";
cin >> d.autor;
cout<<"Codigo: ";
cin>> d.codigo;
cout<<"Preco: ";
cin>> d.preco;
cout << "\n-----------------------------\n";
}
void ListaLivros(TLivro d){
cout << "\nTitulo do livro: " << d.titulo <<"\n";
cout << "Autor: " << d.autor <<"\n";
cout << "Codigo: " << d.codigo <<"\n";
cout << "Preco: " << d.preco <<"\n";
}
int main(){
TLivro Biblioteca[n];
cout << "\n ========== ENTRADA DE LIVROS ========== \n";
for(int i=0; i < n; i++)
{
LerLivro(Biblioteca[i]); // Função que lê de teclado os dados do livro
}
cout << "\n ========== LISTA DE LIVROS ========== \n";
for(int i=0; i < n; i++)
{
ListaLivros(Biblioteca[i]); // Função que lista todos os livros
}
system("PAUSE");
return 0;
}
poderiam me ajudar a criar um vetor em cima desse codigo que fiz para cadastrar n livros?