Ir ao conteúdo
  • Cadastre-se

C++ Verificação de códigos de livros


Mr-86
Ir à solução Resolvido por arfneto,

Posts recomendados

estou fazendo um trabalho que preciso fazer um programa para um acervo de livros, por isso preciso registrar o ISBN de um livros que é um codigo.

fiz um modulador para ler, verificar se já existe e dizer se o codigo digitado é valido. mas o no primeiro IF ele ja entra a todo momento, e não parece que não executa o segundo FOR.

void leiaisbn(string isbn[], int n){
     string codigo;
     bool valido;
   do{
        cout << "Digite o ISBN do livro, contendo 13 digitos e '-' " << endl;
        getline(cin, codigo);
        for(int j=0; j<=codigo.size(); j++){
            if(!isdigit(codigo[j]) and codigo[j] != '-'){
                cout << "Esse ISBN não e valido " <<endl;
                valido = false;
                break;
            }else{
                valido = true;
            }
        }
   }while(codigo.size() == 0 and valido == false);

    for(int i=0; i<=n; i++){
        if(codigo == isbn[i]){
            cout << "Esse livro ja existe " <<endl;
            system ("pause");
            break;
        }
    }

 }

alguém saberia como me ajudar??

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Mr-86    você está comparando uma String inteira com um único caractere da outra variável ,  e você pode tentar assim :

#include <iostream>
#include <cstring>
using namespace std;
void leiaisbn(string isbn, int n);
int main()
{
  string isbn = "";
  int n = 0;
  leiaisbn( isbn , n );
  return 0;
}
void leiaisbn(string isbn , int n)
{
  string codigo;
  bool valido;
  do
  {
    cout << "Digite o ISBN do livro, contendo 13 digitos e '-' " << endl;
    getline(cin, codigo);
    for(int j=0; j<=codigo.size(); j++)
    {
      if(!isdigit(codigo[j]) and codigo[j] != '-')
      {
        cout << "Esse ISBN não e valido " <<endl;
        valido = false;
        break;
      }
      else
      {
        valido = true;
      }
    }
  }while(codigo.size() == 0 and valido == false);

  for(int i=0; i<=n; i++)
  {
    for(int j=0; j<codigo.size(); j++)
    {
      if(codigo[j] == isbn[i])
      {
        cout << "Esse livro ja existe " <<endl;
        system ("pause");
        break;
      }
    }
  }

}

 

Link para o comentário
Compartilhar em outros sites

Eh agr foi tudo pro pau!!

o codigo simplesmente não funciona mais e eu não sei o porque.

#include <iostream>
#include <cstring>
#include <iomanip>

using namespace std;
#define max 10

 int leiaresp();
 void leiaquant(int n , int quant[]);
 void leianome(int&n, string acervo[]);
 void leiautor(string autores[], int n);
 void leiaisbn(string isbn[], int n);
 void ordenar(string acervo[], int n);
 int procurar(string isbn[], int n, int &proc);

 int leiaresp(){

    int resp;

    do{
      cout << "qual acao deseja realizar ??" << endl << "1 Cadrastar um livro" << endl << "2 Procurar um livro" << endl << "3 Excluir um livro " << endl << "4 Aquisicao " << endl << "5 Relatorio" << endl << "0 Encerrar programa" << endl;
      cin >> resp;
      cin.ignore();
   }while(resp < 0 && resp >5);

    return resp;
 }

 void leianome(int &n, string acervo[]){
     string nome;
   do{
    cout << "Digite o nome do livro " << endl;
    getline(cin, nome);

   }while(nome.size() == 0);
   acervo[n] = nome;
   n++;
 }

 void leiautor(string autores[], int n){
     string nome;
   do{
    cout << "Digite o nome completo do autor: " << endl;
    getline(cin, nome);
   }while(nome.size() == 0);
   autores[n] = nome;
 }

 void leiaisbn(string isbn[], int n){
     string codigo;
   do{
        cout << "Digite o ISBN do livro, contendo 13 digitos e '-' " << endl;
        getline(cin, codigo);
        for(int j=0; j<=codigo.size(); j++){
            if(!isdigit(codigo[j]) and codigo[j] != '-'){
                cout << "Esse ISBN não e valido " <<endl;
                break;
            }
            }
   }while(codigo.size() == 0);

    for(int i=0; i<=n; i++){
        if(codigo == isbn[i]){
            cout << "Esse livro ja existe " <<endl;

            break;
        }
    }

 }

 void leiaquant(int n, int quant[]){
    int qtnd;
    do{
        cout << "Digiti a quantidade " << endl;
        cin >> qtnd;
        cin.ignore();
    }while(qtnd <= 0);
    quant[n] = qtnd;
 }

 void ordenar(string acervo[], int n){

    string nome, aux;
    int i, j, k;

   for(int p=0; p<=n; p++){
    nome = acervo[p];
   for(int k=1; k<=n; k++){
    aux = acervo[k];
    for(int i=0; i<=nome.size(); i++){
        for(int j=0; j<=aux.size(); j++){
            if(nome[i] < aux[j]){
              acervo[p] = nome;
              acervo[k] = aux;
            }else{
                acervo[p] = aux;
                acervo[k]= nome;

            }
        }
    }
   }
 }
 }

 int procurar(string isbn[], int n, int &proc){

    string codigo;

    do{
        cout << "Digite o ISBN  " << endl;
        getline(cin, codigo);
   }while(codigo.size() == 0);

   for(int i=0; i<=n; i++){
    if(codigo == isbn[i]){
     proc = i;
    }else{
        proc = 1;
    }
   }

 }

int main()
{

    string nome, acervo[max]={}, autores[max]={}, codigo, isbn[max]={};
    int qtnd=0, n, quant[max], resp, proc;


   do{
    int resp = leiaresp();
    switch(resp){

    case 1:{

    leiaisbn(isbn, n);
    leianome(n, acervo);
    leiautor(autores, n);
    leiaquant(n, quant);
    ordenar(acervo, n);
    system("pause");
    break;
    }

    case 2:{

    procurar(isbn, n, proc);

    cout << isbn[proc] << endl << acervo[proc] << endl << autores[proc] << endl << quant[proc] << endl;
    if(proc == -1){
        cout << "Este Livro não esta nos registros. " << endl;
    }
    system("pause");
    break;
    }


    }
    system("clear||cls");
   }while(resp != 0);

    return 0;

}

não sei mais o que eu posso fazer, já testei com o debugger e nd.

não tenho nem como aplicar a soluções que pedi ajuda no meu post anterior.

alguém tem algum palpite pra ajudar??

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Escreveu praticamente um programa C. E não está bom. Vai ter muito trabalho para terminar assim.

 

NUNCA escreva um programa interativo se puder evitar; Só vai perder mais tempo ainda

 

  • não use bibliotecas de C a menos que tenha uma sólida razão para isso; Aqui não tem. Por exemplo use string e não cstring.
  • C++ é muito mais expressiva que C. É muito mais simples construir modelos em C++; Então use essa simplicidade e use classes e struct.
  • não use system. De nada serve.
  • C++ tem sort, C tem qsort. Use.
  • C++ tem pilhas. Use. Assim se concentra na lógica de seu programa e não perde ainda mais tempo.
  • procura() deve retornar algo, certo?

Habilite TODAS as mensagens de erro do compilador

 

 

Use arquivos. É trivial usar arquivos em C ou C++. E inicialmente use constantes ou geradores.

Recomendo que leia os exemplos no link que te mostrei no outro tópico. Como eu disse, o programa tem 3 maneiras de testar o ISBN. Todas, claro, funcionam. E tem a saída do programa. E tem um gerador. E roda para 2 milhões de ISBN.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@arfneto

Cara agradeço mt pela ajuda, mas não consegui entender mts coisas que você disse. alem de que isso é um trabalho de faculdade na  qual fui proibido de usar structs.

mas agradeço por explicar meu erro, e sobre o codigo de ler ISBN e vi o post que você falou.

@arfneto

esses sao dois erros que eu não faço ideia de como arrumar, ja tentei de tudo. exclui todas as funções uma por uma, para ver onde era o problema, e mesmo assim o erro persisti-o. sinceridade ja não sei mais o que fazer, esse trabalho é pra segunda e não esta nem 50% pronto. 

error 1.jpg

error 2.jpg

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, Mr-86 disse:

Cara agradeço mt pela ajuda, mas não consegui entender mts coisas que você disse. alem de que isso é um trabalho de faculdade na  qual fui proibido de usar structs

Não consigo entender qual seria o propósito de proibir o uso de structs 😄 Folclórico. Queria assistir uma aula dessas algum dia.

 

De todo modo é irrelevante. structs em C são apenas um agrupamento de variáveis sob o mesmo nome. Não usar é só chato. Pode ser muito chato. Em especial porque  pode passar um ponteiro de uma struct de uma função para outra e junto vai todo um universo de coisas. E você pode mudar o conteúdo sem mudar o nome então deve imaginar como isso é conveniente...

 

1 hora atrás, Mr-86 disse:

mas não consegui entender mts coisas que você disse

 

Já pensou em perguntar sobre alguma? É um forum e pode ajudar outros se fizer isso. E não ajuda ninguém nem a você se não perguntar nada. E claro anula o tempo que eu gastei explicando aquilo.

 

Não consegui entender nada desses desenhos que postou. 

 

Faça o simples e poste o programa como está agora e qual o problema que está tendo. Note que como eu disse o exemplo que te mostrei tem 3 funções que calculam isso, e um programa de teste que calcula e testa o ISBN de 2 milhões de livros então deve servir para o seu caso

 

Entendo que preferiu não considerar nada do que falei e insiste em um programa interativo. Não é boa ideia e só vai perder mais tempo.

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@arfneto 

O problema é que o codigo não esta compilando direito e não sei como resolve, essas duas imagens que coloquei, sao onde esta acontecendo o problema do codigo, porém não sei com resolver. entendo que você apresentou aquele post antigo para solucionar o meu problema, mas o codigo tem que ser de forma interativa, pois é o que o trabalho pede. Foi proibido structs pois minha tutora quer que aprender na base do ódio.

minha unica ideia, é reescrever o codigo dnv e ver se consigo arrumar o erro. 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

12 minutos atrás, Mr-86 disse:

mas o codigo tem que ser de forma interativa, pois é o que o trabalho pede

 

Entenda: você não precisa começar com a interatividade. Só perde tempo e mais tempo. Como eu expliquei, use constantes e geradores e comece a testar em minutos sem ter que ficar parado digitando a cada vez que vai testar.

 

Pegue um livro qualquer e use o ISBN. Veja a Tour of C++ por exemplo. Lá na amazon onde por exemplo vende o livro tem
 

image.png.5cce1c8fe697ff3d7d0db4d8005f9ada.png

E já tem um número pra testar. 

Ou veja como eu fiz. 

 

 

 

 

 

 

21 minutos atrás, Mr-86 disse:

O problema é que o codigo não esta compilando direito e não sei como resolve, essas duas imagens que coloquei, sao onde esta acontecendo o problema do codigo

 

Porque não faz o simples e põe o código e quem sabe a linha com " problema' ?

 

22 minutos atrás, Mr-86 disse:

Foi proibido structs pois minha tutora quer que aprender na base do ódio

 

Te expliquei acima que é irrelevante não usar structs. É só chato. E não faz sentido um instrutor fazer isso. Talvez seja para evitar a cópia de trabalhos prontos.

 

55 minutos atrás, arfneto disse:

não consegui entender mts coisas que você disse

 

E nada perguntou sobre essas tais coisas

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Mr-86    você está colocando esse símbolo   "&"   na variável ,  e seu código corrigido para compilar ficou assim  :

#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
#define max 10
int leiaresp();
int leiaquant( int    * , int       );
int leianome ( string * , int       );
int leiautor ( string * , int       );
int leiaisbn ( string * , int       );
int ordenar  ( string * , int       );
int procurar ( string * , int , int );
int main()
{
  string nome;
  string codigo;
  string acervo [max] = {""};
  string autores[max] = {""};
  string isbn   [max] = {""};
  int qtnd = 0;
  int n    = 0;
  int quant     [max] = {0}; /// todas as posições desse Vetor zeradas
  int resp = 0;
  int proc = 0;
  do
  {
    int resp = leiaresp();
    switch(resp)
    {
    case 0:
      cout << "\nSaind0 Do Programa . . . !\n" << endl;
      break;
    case 1:
      leiaisbn ( isbn    , n );
      leianome ( acervo  , n );
      leiautor ( autores , n );
      leiaquant( quant   , n );
      ordenar  ( acervo  , n );
      system   ("pause");
      break;
    case 2:
      procurar(isbn, n, proc);
      cout << isbn[proc] << endl << acervo[proc] << endl << autores[proc] << endl << quant[proc] << endl;
      if(proc == -1)
      {
        cout << "Este Livro não esta nos registros. " << endl;
      }
      system("pause");
      break;
    }
    system("clear||cls"); /// serve para Linux e Windows    
  }while( resp != 0 );
  return 0;
}
int leiaresp()
{
  int resp;
  do
  {
    cout << "qual acao deseja realizar ??\n\
           \r1 Cadrastar um livro\n\
           \r2 Procurar um livro\n\
           \r3 Excluir um livro\n\
           \r4 Aquisicao\n\
           \r5 Relatorio\n\
           \r0 Encerrar programa" << endl;
    cin >> resp;
    cin.ignore();
  }while(resp < 0 || resp >5);
  return resp;
}
int leianome( string acervo[] , int n )
{
  string nome;
  do
  {
    cout << "Digite o nome do livro " << endl;
    getline(cin, nome);

  }while(nome.size() == 0);
  acervo[n] = nome;
  n++;
}
int leiautor(string autores[], int n)
{
  string nome;
  do
  {
    cout << "Digite o nome completo do autor: " << endl;
    getline(cin, nome);
  }while(nome.size() == 0);
  autores[n] = nome;
}
int leiaisbn(string isbn[], int n)
{
  string codigo;
  do
  {
    cout << "Digite o ISBN do livro, contendo 13 digitos e '-' " << endl;
    getline(cin, codigo);
    for(int j=0; j<=codigo.size(); j++)
    {
      if(!isdigit(codigo[j]) and codigo[j] != '-')
      {
        cout << "Esse ISBN não e valido " <<endl;
        break;
      }
    }
  }while(codigo.size() == 0);
  for(int i=0; i<=n; i++)
  {
    if(codigo == isbn[i])
    {
      cout << "Esse livro ja existe " <<endl;
      break;
    }
  }
}
int leiaquant( int quant[] , int n )
{
  int qtnd;
  do
  {
    cout << "Digite a quantidade " << endl;
    cin  >> qtnd;
    cin.ignore();
  }while( qtnd <= 0 );
  quant[n] = qtnd;
}
int ordenar( string acervo[] , int n )
{
  /// string nome;
  string aux;
  for(int i=0; i<n; i++)
    for(int j=i+1; j<n; j++)/// ordenar pela primeira Letra
    {
      if(acervo[i] > acervo[j])
      {
        aux       = acervo[i];
        acervo[i] = acervo[j];
        acervo[j] =       aux;
      }
    }
  /*for( int p=0; p<n; p++ )
  {
    nome = acervo[p];
    for( int k=1; k<=n; k++ )
    {
      aux = acervo[k];
      for( int i=0; i<=nome.size(); i++ )
      {
        for( int j=0; j<=aux.size(); j++ )
        {
          if(nome[i] < aux[j])
          {
            acervo[p] = nome;
            acervo[k] = aux;
          }
          else
          {
            acervo[p] = aux;
            acervo[k]= nome;
          }
        }
      }
    }
  }*/
}
int procurar( string isbn[] , int n , int proc )
{
  string codigo;
  do
  {
    cout << "Digite o ISBN  " << endl;
    getline( cin , codigo );
  }while( codigo.size() == 0 );
  for( int i=0; i<=n; i++ )
  {
    if( codigo == isbn[i] )
    {
      proc = i;
    }
    else
    {
      proc = 1;
    }
  }
}

 

Link para o comentário
Compartilhar em outros sites

@arfneto

eu queria poder dizer onde esta o problema, mas eu não sei. tudo que eu sei que tem um problema que não deixa eu testar nd no códigos, pois ele não passa nunca de primeira função. por isso botei aquelas imagens pra ver se alguém pode me dizer o que esta acontecendo, pois o programa ta retornando um valo todo quebrado.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Mr-86 

 Poste o código e assim alguém pode copiar e tentar compilar e ajudar você. Imagens de pouco vão servir. E nem é uma imagem de seu código e sim de um modelo em string

 

E repito: deve fazer as coisas como eu disse. Assim vai perder --- e está perdendo --- muito tempo a toa.

 

Poste o código.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Mr-86 Seu programa é praticamente um programa em C; Não está bom e vai ter um trabalho do inferno para terminar assim. Alguns dos problemas eu já te disse.

 

Um dos problemas que teve você não explicou: não sei como chegou aquele código de basic.string.h. E você também não explicou mesmo eu tendo perguntado.

 

C++ é muito mais expressiva que C. É muito mais fácil escrever as coisas, criar representações. Você sõ escreveu C. E interativo ainda.

 

Porque seu código não compila? 

 

  • seu compilar está mal configurado. provavelmente usando C++ de 98, tipo 23 anos atrás. Para usar and precisa de algo mais novo. E não tem sentido usar essa versão de C++ se está aprendendo. Faça o simples e use C++20 ou C++17. São 20 anos afinal.
            if (!isdigit(codigo[j]) and codigo[j] != '-') {
                cout << "Esse ISBN não e valido " << endl;
                break;
            }

 

essa linha aí. Pode usar && mas é claro que and é mais legível. O pior é o not. Claro que é um porre achar os not no meio de uma expressão já que o operador é ´!´. Mas para usar and, or e not precisa de C++14 eu acho. Ou C++17. Teste aí. Basta usar o -std=C++17 ou --std=C++14

 

Preste atenção às mensagens do compilador antes de tudo.

 

Veja o que o meu disse sobre seu programa na linha do and...

 

(55,37): error C2146: syntax error: missing ')' before identifier 'and'
(55,37): error C2065: 'and': undeclared identifier
(55,41): error C2146: syntax error: missing ';' before identifier 'codigo'
(55,57): error C2059: syntax error: ')'

 

Pois é.

 

 

1>C:\Users\arfne\source\repos\chp22-0902-livros\original.cpp(126): error C4716: 'procurar': must return a value

 

Porque será?

 

Sua função não devia retornar um int? Mas sequer tem um return...

 

int procurar(string isbn[], int n, int& proc) {

    string codigo;

    do {
        cout << "Digite o ISBN  " << endl;
        getline(cin, codigo);
    } while (codigo.size() == 0);

    for (int i = 0; i <= n; i++) {
        if (codigo == isbn[i]) {
            proc = i;
        }
        else {
            proc = 1;
        }
    }
}

 

E porque não retorna o que está usando em proc? Pra que uma referência aí?

 

Esse código faz a mesma coisa, seja o que for:

 

int procurar(string isbn[], int n)
{
	string codigo;
	int proc = 0;
	do {
		cout << "Digite o ISBN  " << endl;
		getline(cin, codigo);
	} while (codigo.size() == 0);

	for (int i = 0; i <= n; i++) {
		if (codigo == isbn[i])
			proc = i;
		else
			proc = 1;
	}
	return proc;
}

 

E chama assim na única vez em que usa isso
 

			proc = procurar(isbn, n);

 

Talvez concorde que é até mais fácil de ler.

 

 

e esses:

 

(141): warning C4700: uninitialized local variable 'n' used
(165): warning C4700: uninitialized local variable 'resp' used

 

Parece que está usando umas variáveis não inicializadas. E está mesmo.

 

Arrume isso. E as outras coisas que eu sugeri.

 

Seu programa gira em torno de um acervo. Acha que se tivesse uma classe Acervo  com essas coisas dentro seu programa ficaria bem mais fácil? Ficaria. Muito. 

 

Não use system(). Nunca. Para nada. Não estará fazendo nada. Não vai aprender nada. E é proibido em toda parte mesmo 😉 então não adianta.

 

Eis o código igual mas compilando a partir do que está nas mensagens do compilador

 

#include <iostream>
#include <string>
#include <iomanip>

using namespace std;
#define max 10

int leiaresp();
void leiaquant(int n, int quant[]);
void leianome(int& n, string acervo[]);
void leiautor(string autores[], int n);
void leiaisbn(string isbn[], int n);
void ordenar(string acervo[], int n);
int procurar(string isbn[], int n, int& proc);

int leiaresp() {

	int resp;

	do {
		cout << "qual acao deseja realizar ??" << endl << "1 Cadrastar um livro" << endl << "2 Procurar um livro" << endl << "3 Excluir um livro " << endl << "4 Aquisicao " << endl << "5 Relatorio" << endl << "0 Encerrar programa" << endl;
		cin >> resp;
		cin.ignore();
	} while (resp < 0 && resp >5);

	return resp;
}

void leianome(int& n, string acervo[]) {
	string nome;
	do {
		cout << "Digite o nome do livro " << endl;
		getline(cin, nome);

	} while (nome.size() == 0);
	acervo[n] = nome;
	n++;
}

void leiautor(string autores[], int n) {
	string nome;
	do {
		cout << "Digite o nome completo do autor: " << endl;
		getline(cin, nome);
	} while (nome.size() == 0);
	autores[n] = nome;
}

void leiaisbn(string isbn[], int n) {
	string codigo;
	do {
		cout << "Digite o ISBN do livro, contendo 13 digitos e '-' " << endl;
		getline(cin, codigo);
		for (int j = 0; j <= codigo.size(); j++) {
			if (!isdigit(codigo[j]) and codigo[j] != '-') {
				cout << "Esse ISBN não e valido " << endl;
				break;
			}
		}
	} while (codigo.size() == 0);

	for (int i = 0; i <= n; i++) {
		if (codigo == isbn[i]) {
			cout << "Esse livro ja existe " << endl;

			break;
		}
	}

}

void leiaquant(int n, int quant[]) {
	int qtnd;
	do {
		cout << "Digiti a quantidade " << endl;
		cin >> qtnd;
		cin.ignore();
	} while (qtnd <= 0);
	quant[n] = qtnd;
}

void ordenar(string acervo[], int n) {

	string nome, aux;
	int i, j, k;

	for (int p = 0; p <= n; p++) {
		nome = acervo[p];
		for (int k = 1; k <= n; k++) {
			aux = acervo[k];
			for (int i = 0; i <= nome.size(); i++) {
				for (int j = 0; j <= aux.size(); j++) {
					if (nome[i] < aux[j]) {
						acervo[p] = nome;
						acervo[k] = aux;
					}
					else {
						acervo[p] = aux;
						acervo[k] = nome;

					}
				}
			}
		}
	}
}

int procurar(string isbn[], int n)
{
	string codigo;
	int proc = 0;
	do {
		cout << "Digite o ISBN  " << endl;
		getline(cin, codigo);
	} while (codigo.size() == 0);

	for (int i = 0; i <= n; i++) {
		if (codigo == isbn[i])
			proc = i;
		else
			proc = 1;
	}
	return proc;
}

int main()
{

	string nome, acervo[max] = {}, autores[max] = {}, codigo, isbn[max] = {};
	int qtnd = 0, quant[max], proc;
	int n = 0;
	int resp = 0;

	do {
		int resp = leiaresp();
		switch (resp) {

		case 1: {

			leiaisbn(isbn, n);
			leianome(n, acervo);
			leiautor(autores, n);
			leiaquant(n, quant);
			ordenar(acervo, n);
			//system("pause");
			break;
		}

		case 2: {

			proc = procurar(isbn, n);

			cout << isbn[proc] << endl << acervo[proc] << endl << autores[proc] << endl << quant[proc] << endl;
			if (proc == -1) {
				cout << "Este Livro não esta nos registros. " << endl;
			}
			system("pause");
			break;
		}


		}
		system("clear||cls");
	} while (resp != 0);

	return 0;

}

 

 

 

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

2 minutos atrás, Mr-86 disse:

Entendi o que você falo no #16, e não o meu compilador nunca mostrou isso

 

Mas você entendeu que precisa MUITO disso? São as mensagens do compilador. Precisa disso com todo o detalhe. 

E precisa saber um mínimo sobre as versões da linguagem. O mínimo é saber escolher qual vai usar ou qual está usando.

 

Entende o tempo que perde se não souber isso? 

Se ver um exemplo pode não conseguir rodar e nem saber porque...

 

Seu curso adota um livro? Tem uma apostila? 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Mas você entendeu que precisa MUITO disso? São as mensagens do compilador. Precisa disso com todo o detalhe. 

E precisa saber um mínimo sobre as versões da linguagem. O mínimo é saber escolher qual vai usar ou qual está usando.

 

Entende o tempo que perde se não souber isso? 

Se ver um exemplo pode não conseguir rodar e nem saber porque...

 

pergunto de novo... 😉 

que compilador você usa? Que sistema? Que ambiente? Isso faz toda a diferença

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@arfneto Eu uso o codeblocks por pedido da tutora, e não sei dizer que compilador, pois ainda sou meio leigo nisso.

@arfneto Cara estava dando uma olhada no seu post #16, porque o meu do/while não ta funcionando, ele não repete o switch case.

quando eu rodo o codigo e funciona normalmente porém quando estou finalizando a primeira função, e é pra ele sair do case 1 e voltar pro do/while, ele apenas exibe uma mensagem pedindo permissão pra continuar e finaliza o programa.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@arfneto

#include <iostream>
#include <cstring>
#include <iomanip>

using namespace std;
#define max 10

    int Leiaresp();
    void incluir(int&n, int quant[], string acervo[], string isbn[], string autores[]);
    void ordenar(int n, int quant[], string acervo[], string isbn[], string autores[]);
    int procurar(string isbn[], int n);
    void excluir(int&n, int quant[], string acervo[], string isbn[], string autores[], int proc);
    void aquizicao(int quant[], int proc);

int main(){
    string acervo[max], isbn[max], autores[max];
    int n=0, quant[max], resp;

    do{

        int resp = Leiaresp();

        switch(resp){
        case 1 :{
        incluir(n, quant, acervo, isbn, autores);
        ordenar(n, quant, acervo, isbn, autores);
        break;
        }

        case 2:{
        int proc = procurar(isbn, n);
        cout << isbn[proc] << endl << acervo[proc] << endl << autores[proc] << endl << quant[proc] << endl;
          if(proc == -1){
        cout << "Este Livro não esta nos registros. " << endl;
          }
        system("pause");
        break;
        }

        case 3:{

        int proc = procurar(isbn, n);
        if(proc == -1){
        cout << "Este Livro não esta nos registros. " << endl;
          }
        excluir(n, quant, acervo, isbn, autores, proc);
        system("pause");
        break;
        }

        case 4:{

         int proc = procurar(isbn, n);
         if(proc == -1){
        cout << "Este Livro não esta nos registros. " << endl;
          }
        aquizicao(quant, proc);
        system("pause");
        break;
        }

        }

    }while(resp != 0);

    return 0;
}

 int Leiaresp(){

    int resp;

    do{
      cout << "qual acao deseja realizar ??" << endl << "1 Cadrastar um livro" << endl << "2 Procurar um livro" << endl << "3 Excluir um livro " << endl << "4 Aquisicao " << endl << "5 Relatorio" << endl << "0 Encerrar programa" << endl;
      cin >> resp;
      cin.ignore();
   }while(resp < 0 && resp >5);

    return resp;
 }

 void incluir(int &n, int quant[], string acervo[], string isbn[], string autores[]){

    string codigo, nome, autor;
    int qtnd;
    bool valido;

   do{
    cout << "Digite o ISBN do livro, contendo 13 digitos e '-' " << endl;
    getline(cin, codigo);
    for(int j=0; j<=codigo.size(); j++){
     if(not isdigit(codigo[j]) && codigo[j] != '-'){
        cout << "Esse ISBN não e valido " <<endl;
        valido = false;
        break;
      }else{
        valido = true;
      }
    }
  }while(codigo.size() == 0 and valido == false);

  //INSERIR O CODIGO PARA VERIFICAÇAO DE COPIA!!

    isbn[n] = codigo;
    n++;

   do{
    cout << "Digite o nome do livro " << endl;
    getline(cin, nome);
    }while(nome.size() == 0);
   acervo[n] = nome;

   do{
    cout << "Digite o nome completo do autor: " << endl;
    getline(cin, autor);
   }while(autor.size() == 0);
   autores[n] = autor;

   do{
        cout << "Digite a quantidade " << endl;
        cin >> qtnd;
        cin.ignore();
    }while(qtnd <= 0);
    quant[n] = qtnd;

 }

void ordenar(int n, int quant[], string acervo[], string isbn[], string autores[]){

    string nome, aux;
    int i, j, k;

   for(int p=0; p<=n; p++){
    nome = acervo[p];
   for(int k=1; k<=n; k++){
    aux = acervo[k];
    for(int i=0; i<=nome.size(); i++){
        for(int j=0; j<=aux.size(); j++){
            if(nome[i] > aux[j]){
                acervo[p] = aux;
                acervo[k]= nome;

                //ORGANIZAR AS OUTRAS POSIÇOES!!!

            }
        }
    }
   }
 }
 }

int procurar(string isbn[], int n){

	string codigo;
	int proc = 0;

	do {
		cout << "Digite o ISBN  " << endl;
		getline(cin, codigo);
	} while (codigo.size() == 0);

	for (int i = 0; i <= n; i++) {
		if (codigo == isbn[i])
			proc = i;
		else
			proc = 1;
	}
	return proc;
}

void excluir(int&n, int quant[],string acervo, string isbn[], string autores[], int proc){

    for(int i=proc; i<=n; i++){
        acervo[i] = acervo[i+1];
        isbn[i] = isbn[i+1];
        autores[i] = autores[i+1];
        quant[i] = quant[i+1];
    }
    n--;
}

void aquizicao(int quant[], int proc){

    int qtde;

    cout << "Quantos livros deseja adquirir ??" << endl;
    cin >> qtde;
    quant[proc] = quant[proc] + qtde;

}

Aqui esta o codigo atual, contando que esta dando um erro no case 3, e ainda sei como arrumar. mas meu principal problema é o do/while que do int main, que não esta repetindo.

 

e Pf não julgue o meu codigo atual, eu tentei melhorar ele, e ainda não arrumei o meu debugger pois não sei como.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!