Ir ao conteúdo
  • Cadastre-se

Valores nao sao salvos no vetor em c - tad


Ir à solução Resolvido por ScreenBlack,

Posts recomendados

Tenho um programa de ED, e temos que criar um programa que gerencie um cinema. Terminei meu código, está rodando, porém nao importa quantos valores eu insira em meu vetor, quando mando verificar ele sempre está vazio, nao estou conseguindo encontrar a lógica
a biblioteca está assim

typedef struct{
 char filme[40];
 float valor;
 int ingresso;
 int sala;
 int codigo;
}cinema;

typedef struct{
    int primeiro, ultimo;
    cinema lugares[250];
}salas;

salas criarsala(){
    salas aux;
    aux.primeiro = 0;
    aux.ultimo = -1;

    return aux;
}

void menu(){
        printf("\t\t+------------------------------------------------------------------------------+\n");
        printf("\t\t|\tEscolha a opção desejada.                                              |\n");
        printf("\t\t|\t1. Comprar Ingresso.                                                   |\n");
        printf("\t\t|\t2. Devolver Ingresso.                                                  |\n");
        printf("\t\t|\t3. Imprimir todos os ingressos de uma determinada sala.                |\n");
        printf("\t\t|\t4. Calcular valor total de uma determinada sala.                       |\n");
        printf("\t\t|\t5. Calcular total de lugares ocupados em uma sala;                     |\n");
        printf("\t\t|\t6. Criar um backup da venda do dia ordenando ingressos por sala.       |\n");
        printf("\t\t|\t7. Calcular total de ingressos tipo meia.                              |\n");
        printf("\t\t|\t8. Fechamento do dia: Limpas vendar e retornar valor total recebido.   |\n");
        printf("\t\t+------------------------------------------------------------------------------+\n");
        printf("\t\t\tOpção: ");
}

// inserir item //


int verificarDisponibilidade(salas aux, int sala){
    int i, lugar=0;
        for (i=aux.primeiro; i<=aux.ultimo; i++){
            if(aux.lugares[i].sala==sala)
                lugar++;
    }
    return lugar;
}

salas inserirCliente(salas aux, int sala){
    aux.ultimo++;
    aux.lugares[aux.ultimo].sala=sala;
    setbuf(stdin, NULL);
    printf("\nInsira o nome do filme\n");
    scanf("%[^\n]s", &aux.lugares[aux.ultimo].filme);
    setbuf(stdin, NULL);
    printf("\nInsira o valor do ingresso: R$ ");
    scanf("%f", &aux.lugares[aux.ultimo].valor);
    printf("\nInsira o tipo do ingresso\n 1. Inteira   2. Meia: ");
    scanf("%d", &aux.lugares[aux.ultimo].ingresso);
    printf("Insira ou crie o codigo do ingresso: ");
    scanf("%d", &aux.lugares[aux.ultimo].codigo);

    return aux;
}

int pesquisarItem(salas aux, cinema numero){
    int posicao = -1;
    int i=0;
    for(i= aux.primeiro; i<=aux.ultimo; i++){
        if(numero.codigo == aux.lugares[i].codigo){
            posicao=i;
            }
        }

    return posicao;
}

salas retirar(salas aux, cinema codigo){
				int retorno = pesquisarItem(aux, codigo);
				if(retorno == -1){
					printf("Ingresso não encontrado! Impossível devolver");
				}
				else{
					int i;
					aux.ultimo--;
					for(i=retorno; i <= aux.ultimo; i++){
						aux.lugares[i] = aux.lugares[i+1];

					}
				}
				return aux;
}

void imprimirSala(salas aux, int sala){
    int i, vazio=0;
	for(i=aux.primeiro; i<=aux.ultimo; i++){
		if(aux.lugares[i].sala==sala){
            vazio++;
			printf("\nFilme %s", aux.lugares[i].filme);
			printf("\nSala %d", aux.lugares[i].sala);
			printf("\nValor R$ %.2f", aux.lugares[i].valor);
			if(aux.lugares[i].ingresso==1)
			printf("Entrada tipo Inteira.");
			else
			printf("Entrada tipo Meia.");

		}
	}
	if (vazio==0){
		printf("Sala Vazia");
	}
}

void valorTotal(salas aux, int sala){
	int i;
	float valortotal=0;
	for(i=aux.primeiro; i<aux.ultimo; i++){
		if(aux.lugares[i].sala==sala){
		valortotal+=aux.lugares[i].valor;
		}
	}
	if (valortotal==0){
		printf("Sala Vazia");
	}
	else
		printf ("Valor total é R$: %.2f", valortotal);
}
void totalDeLugares(salas aux, int sala){
    int i, repeticao=0;
    for(i=aux.primeiro; i<=aux.ultimo; i++){
    if(aux.lugares[i].sala==sala){
        repeticao++;
    }
}
if(repeticao==0)
    printf("A sala está vazia");

else
    printf("Existem %d lugares na sala", repeticao);
}

salas backup(salas aux){
		salas backup;
		int sala=1, i, cont=0;
		do{
			for(i=aux.primeiro; i<aux.ultimo; i++)
				if(aux.lugares[i].sala==sala){
					backup.lugares[cont]=aux.lugares[i];
					cont++;
				}
			sala++;
		}while(sala<=5);
		return backup;
	}

void imprimirTudo(salas backup){
    int i, vazio=0;
    for(i=backup.primeiro; i<backup.ultimo; i++){
        if(backup.lugares[i].sala==2 || backup.lugares[i].sala==2 || backup.lugares[i].sala==3 ||
           backup.lugares[i].sala==4 || backup.lugares[i].sala==5){
           vazio++;
           printf("\nFilme %s", backup.lugares[i].filme);
           printf("\nSala %d", backup.lugares[i].sala);
           printf("\nValor R$ %f", backup.lugares[i].valor);
           if(backup.lugares[i].ingresso==1)
            printf("Entrada tipo Inteira.");
           else
            printf("Entrada tipo Meia.");
           }
    }
    if (vazio==0){
            printf("Backup Vazio");
    }
}

void totalMeia(salas aux){
    int i, vazio=0;
    float valortotal=0;
    for(i=aux.primeiro; i<aux.ultimo; i++){
        if(aux.lugares[i].ingresso==2){
            vazio++;
            valortotal+=aux.lugares[i].valor;
        }
    }
    if (vazio==0){
        printf("Nenhuma venda do tipo meia até o momento");
    }
    else
        printf ("Valor total de ingressos tipo meia é R$: %f", valortotal);
}

salas fechamentoDoDia(salas aux){
		int i;
		float valortotal=0;
		for(i=aux.primeiro; i<aux.ultimo; i++){
			valortotal+=aux.lugares[i].valor;
		}
		aux.ultimo=-1;
		aux.primeiro=0;

		if (valortotal==0){
			printf("Nenhum ingresso vendido.");
		}
		else
			printf ("Valor total de ingressos é R$: %f", valortotal);
        return aux;
	}

e o main está desta forma

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include "biblioteca.h"
/*
 *
 */
int main() {
    setlocale(LC_ALL, "Portuguese");
    salas aux;
    int op, exit, sala;
do{
    // MENU //

    menu();
    scanf("%d", &op);

    if (op==1){
    printf("Insira o número da sala: ");
    scanf("%d", &sala);
    if (verificarDisponibilidade(aux, sala)<50){
        inserirCliente(aux, sala);
    }
    else{
        printf("\nNão há mais espaços na sala!");
    }
    } // fim da primeira opção

   else if(op==2){
        printf("\nInsira o codigo do filme que deseja devolver: ");
        scanf("%d", &codigo.codigo);
        retirar(aux, codigo);

    } // fim da segunda opção

   else if(op==3){
      printf("\nInsira o número da sala: ");
      scanf("%d", &sala);
      imprimirSala(aux, sala);
    }  // fim da terceira opção

    else if(op==4){
        printf("\nInsira o número da sala: ");
        scanf("%d", &sala);
        valorTotal(aux, sala);
    }  // fim da quarta opção //

    else if(op==5){
        printf("\nInsira o número da sala: ");
        scanf("%d", &sala);
        totalDeLugares(aux, sala);
    }  // fim da quinta opção //

    else if(op==6){
        backup(aux);
        printf("Backup criado, deseja vê-lo agora?\n1. Sim 2.Nao ");
        scanf("%d", &exit);
        if(exit==1){
            imprimirTudo(backup(aux));
        }
    } // fim da sexta opção //

    else if(op==7){
        totalMeia(aux);
    } // fim da sétima opção //

    else if(op==8){
      fechamentoDoDia(aux);
    } // fim da oitava opção //

else
printf("Opção Inválida!");

    printf("\n\nDeseja fazer outra operação?\n1. Sim 2. Não ");
    scanf("%d", &exit);

}while(exit==1);
 return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução

Você não está armazenando a lista retornada pela função 'inserirCliente()'

 

Fiz alguns ajustes em seu código, apenas para melhorar o tratamento.

Comentei em cada linha alterada:

 

Spoiler

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

typedef struct
{
    char filme[40];
    float valor;
    int ingresso;
    int sala;
    int codigo;
} cinema;

typedef struct
{
    int primeiro, ultimo;
    cinema lugares[250];
} salas;

salas criarsala()
{
    salas aux;
    aux.primeiro = 0;
    aux.ultimo = -1;

    return aux;
}

void menu()
{
    printf("\t\t+------------------------------------------------------------------------------+\n");
    printf("\t\t|\tEscolha a opcao desejada.                                              |\n");
    printf("\t\t|\t1. Comprar Ingresso.                                                   |\n");
    printf("\t\t|\t2. Devolver Ingresso.                                                  |\n");
    printf("\t\t|\t3. Imprimir todos os ingressos de uma determinada sala.                |\n");
    printf("\t\t|\t4. Calcular valor total de uma determinada sala.                       |\n");
    printf("\t\t|\t5. Calcular total de lugares ocupados em uma sala;                     |\n");
    printf("\t\t|\t6. Criar um backup da venda do dia ordenando ingressos por sala.       |\n");
    printf("\t\t|\t7. Calcular total de ingressos tipo meia.                              |\n");
    printf("\t\t|\t8. Fechamento do dia: Limpas vendar e retornar valor total recebido.   |\n");
    printf("\t\t+------------------------------------------------------------------------------+\n");
    printf("\t\t\tOpcao: ");
}

// inserir item //


int verificarDisponibilidade(salas aux, int sala)
{
    int i, lugar=0;
    for (i=aux.primeiro; i<=aux.ultimo; i++)
    {
        if(aux.lugares[i].sala==sala)
            lugar++;
    }
    return lugar;
}

salas inserirCliente(salas aux, int sala)
{

    aux.lugares[aux.ultimo].sala=sala;
    setbuf(stdin, NULL);
    printf("\nInsira o nome do filme\n");
    scanf(" %[^\n]s", aux.lugares[aux.ultimo].filme); /* MODIFICADO: Removido o '&' pois ja é um ponteiro para vetor */
    setbuf(stdin, NULL);
    printf("\nInsira o valor do ingresso: R$ ");
    scanf("%f", &aux.lugares[aux.ultimo].valor);
    printf("\nInsira o tipo do ingresso\n 1. Inteira   2. Meia: ");
    scanf("%d", &aux.lugares[aux.ultimo].ingresso);
    printf("Insira ou crie o codigo do ingresso: ");
    scanf("%d", &aux.lugares[aux.ultimo].codigo);
    aux.ultimo++; /* MODIFICADO: Incrementa somente no final, pois o vetor ja começa na posição zero */

    return aux;
}

int pesquisarItem(salas aux, int numero) /* MODIFICADO: Alterada a declaração para "int numero" */
{
    int posicao = -1;
    int i=0;
    for(i= aux.primeiro; i<=aux.ultimo; i++)
    {
        if(numero == aux.lugares[i].codigo) /* MODIFICADO: Altera a comparação para 'numero' */
        {
            posicao=i;
        }
    }

    return posicao;
}

salas retirar(salas aux, int codigo) /* MODIFICADO: Alterada a declaração para "int codigo" */
{
    int retorno = pesquisarItem(aux, codigo);
    if(retorno == -1)
    {
        printf("Ingresso nao encontrado! Impossivel devolver");
    }
    else
    {
        int i;
        aux.ultimo--;
        for(i=retorno; i <= aux.ultimo; i++)
        {
            aux.lugares[i] = aux.lugares[i+1];

        }
    }
    return aux;
}

void imprimirSala(salas aux, int sala)
{
    int i, vazio=0;
    for(i=aux.primeiro; i<=aux.ultimo; i++)
    {
        if(aux.lugares[i].sala==sala)
        {
            vazio++;
            printf("\nFilme %s", aux.lugares[i].filme);
            printf("\nSala %d", aux.lugares[i].sala);
            printf("\nValor R$ %.2f", aux.lugares[i].valor);
            if(aux.lugares[i].ingresso==1)
                printf("Entrada tipo Inteira.");
            else
                printf("Entrada tipo Meia.");

        }
    }
    if (vazio==0)
    {
        printf("Sala Vazia");
    }
}

void valorTotal(salas aux, int sala)
{
    int i;
    float valortotal=0;
    for(i=aux.primeiro; i<aux.ultimo; i++)
    {
        if(aux.lugares[i].sala==sala)
        {
            valortotal+=aux.lugares[i].valor;
        }
    }
    if (valortotal==0)
    {
        printf("Sala Vazia");
    }
    else
        printf ("Valor total é R$: %.2f", valortotal);
}
void totalDeLugares(salas aux, int sala)
{
    int i, repeticao=0;
    for(i=aux.primeiro; i<=aux.ultimo; i++)
    {
        if(aux.lugares[i].sala==sala)
        {
            repeticao++;
        }
    }
    if(repeticao==0)
        printf("A sala esta vazia");

    else
        printf("Existem %d lugares na sala", repeticao);
}

salas backup(salas aux)
{
    salas backup;
    int sala=1, i, cont=0;
    do
    {
        for(i=aux.primeiro; i<aux.ultimo; i++)
            if(aux.lugares[i].sala==sala)
            {
                backup.lugares[cont]=aux.lugares[i];
                cont++;
            }
        sala++;
    }
    while(sala<=5);
    return backup;
}

void imprimirTudo(salas backup)
{
    int i, vazio=0;
    for(i=backup.primeiro; i<backup.ultimo; i++)
    {
        if(backup.lugares[i].sala==2 || backup.lugares[i].sala==2 || backup.lugares[i].sala==3 ||
                backup.lugares[i].sala==4 || backup.lugares[i].sala==5)
        {
            vazio++;
            printf("\nFilme %s", backup.lugares[i].filme);
            printf("\nSala %d", backup.lugares[i].sala);
            printf("\nValor R$ %f", backup.lugares[i].valor);
            if(backup.lugares[i].ingresso==1)
                printf("Entrada tipo Inteira.");
            else
                printf("Entrada tipo Meia.");
        }
    }
    if (vazio==0)
    {
        printf("Backup Vazio");
    }
}

void totalMeia(salas aux)
{
    int i, vazio=0;
    float valortotal=0;
    for(i=aux.primeiro; i<aux.ultimo; i++)
    {
        if(aux.lugares[i].ingresso==2)
        {
            vazio++;
            valortotal+=aux.lugares[i].valor;
        }
    }
    if (vazio==0)
    {
        printf("Nenhuma venda do tipo meia ate o momento");
    }
    else
        printf ("Valor total de ingressos tipo meia é R$: %f", valortotal);
}

salas fechamentoDoDia(salas aux)
{
    int i;
    float valortotal=0;
    for(i=aux.primeiro; i<aux.ultimo; i++)
    {
        valortotal+=aux.lugares[i].valor;
    }
    aux.ultimo=-1;
    aux.primeiro=0;

    if (valortotal==0)
    {
        printf("Nenhum ingresso vendido.");
    }
    else
        printf ("Valor total de ingressos é R$: %f", valortotal);
    return aux;
}

int main()
{
    setlocale(LC_ALL, "Portuguese");
    salas aux;
    int op, exit, sala;
    int codigo = 0; /* MODIFICADO: Criada a variável 'codigo' */

    /* MODIFICADO: Inicializando variáveis das salas */
    aux.primeiro = 0;
    aux.ultimo = 0;

    do
    {
        // MENU //

        menu();
        scanf("%d", &op);

        if (op==1)
        {
            printf("Insira o numero da sala: ");
            scanf("%d", &sala);
            if (verificarDisponibilidade(aux, sala)<50)
            {
                aux = inserirCliente(aux, sala); /* MODIFICADO: Faltou armazenar a lista retornada pela função */
            }
            else
            {
                printf("\nNao ha mais espacos na sala!");
            }
        } // fim da primeira opção

        else
            if(op==2)
            {
                printf("\nInsira o codigo do filme que deseja devolver: ");
                scanf("%d", &codigo); /* MODIFICADO: Alterada a variável para 'codigo' */
                retirar(aux, codigo);

            } // fim da segunda opção

            else
                if(op==3)
                {
                    printf("\nInsira o numero da sala: ");
                    scanf("%d", &sala);
                    imprimirSala(aux, sala);
                }  // fim da terceira opção

                else
                    if(op==4)
                    {
                        printf("\nInsira o numero da sala: ");
                        scanf("%d", &sala);
                        valorTotal(aux, sala);
                    }  // fim da quarta opção //

                    else
                        if(op==5)
                        {
                            printf("\nInsira o numero da sala: ");
                            scanf("%d", &sala);
                            totalDeLugares(aux, sala);
                        }  // fim da quinta opção //

                        else
                            if(op==6)
                            {
                                backup(aux);
                                printf("Backup criado, deseja ve-lo agora?\n1. Sim 2.Nao ");
                                scanf("%d", &exit);
                                if(exit==1)
                                {
                                    imprimirTudo(backup(aux));
                                }
                            } // fim da sexta opção //

                            else
                                if(op==7)
                                {
                                    totalMeia(aux);
                                } // fim da sétima opção //

                                else
                                    if(op==8)
                                    {
                                        fechamentoDoDia(aux);
                                    } // fim da oitava opção //

                                    else
                                        printf("Opcao Invalida!");

        printf("\n\nDeseja fazer outra operacao?\n1. Sim 2. Nao ");
        scanf("%d", &exit);

    }
    while(exit==1);

    return 0;
}

 

 

 

Sempre que criar uma variável, não esqueça de inicializa-la, para evitar tratamentos com 'lixo' em memória.

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

Visitante
Este tópico está impedido de receber novas respostas.

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...