Ir ao conteúdo

Posts recomendados

Postado

Boa noite,meu nome é Matheus,sou estudante do curso de Ciencia da Computação do 5°semestre,estou fazendo um trabalho em c junto com meu colega e estamos tendo dificuldade em solucionar esse erro da imagem,tentei alterar o switch tambem mas nao deu certo,solicito assistencia no erro por favor(Imagem em sequencia do erro abaixo)(Algoritmo embaixo do codigo).

image.png.f796b219273e45d5199fa522483bd64f.png&key=932d69d8514fc575image.png.fa6de347202fe6db43b715b2decb2bcf.pngimage.png.5f6b5029415f75dc8857d899184fb38d.png


 

//Aluno: Bruno Garcia Dos Santos Louveiro RA:202717013098
//Aluno: Matheus Tomi RA:203501813098
#include<stdio.h>
#include<stdlib.h>

struct Banco{	
	int numero_conta;
	char nome_cliente[30];
	float saldo;
	struct Banco *prox;
	struct Banco *ant;	
};typedef struct Banco node;

void inicia(node *inicio);
void InsereInicio(node *inicio);
void InsereFinal(node *inicio);
void exibe(node *inicio);
void remover(node *inicio);
void liberar(node * libera);
	
int main(){
	
	node *inicio = (node*) malloc(sizeof(node));
	inicia(inicio);	
	
	int opcao=1;
	
	while(opcao!=0){
		
	    system("cls");	
		printf("1-Exibir Lista \n");
		printf("2-Adicionar Novo Cliente \n");
		printf("3-Remover Cliente \n");
		printf("4-Zerar Lista \n");
		printf("Digite uma Opcao: ");
		scanf("%i",&opcao);
		system("cls");
		
		switch(opcao){
			
			case 1:
				
				exibe(inicio);
				break;
		
			int op;
			case 2:
				printf("\n");
				printf("1-Adicionar no Inicio \n");
				printf("2-Adicionar no Final \n\n");
				printf("Escolha Uma Das opções:\n");
				scanf("%i",&op);
				switch(op){
					case 1:
						InsereInicio(inicio);
						break;
					case 2:
						InsereFinal(inicio);
						break;
					default:
						printf("Opcao Invalida\n");
						system("PAUSE");
						break;
				}
			
			case 3:
				remover(inicio);
				break;
			case 4:
				inicio->prox=NULL;
				free(inicio);
				break;
			case 0:
				printf("Fim Da Execução!!!\n");
				break;
			default:
				system("cls");
				printf("Codigo Nao Encontrado\n");
				system("PAUSE");
				break;
				}
		}
		free(inicio);
		return 0;
}


void inicia(node* inicio){
	inicio->prox=NULL;
	inicio->ant =NULL;
}

//FUNÇÃO INSERE INICIO - PARA INSERIR NO INICIO DA LISTA
void InsereInicio(node* inicio){
	system("cls");
	
	node* novo =(node*) malloc(sizeof(node));
	
	if (!novo){
		printf("Nao foi possivel alocar a memoria!\n");
		exit(1);
	}
		printf("Informe o Nome do Cliente:");
		fflush(stdin);
		scanf("%c[^\n]",novo->nome_cliente);
		printf("Informe o Numero da Conta:");
		scanf("%i",novo->numero_conta);
		printf("Informe o Saldo do Cliente:");
		scanf("%d",novo->saldo);
	
	if(inicio->prox==NULL){	
		
		inicio->prox=novo;
		novo->prox=NULL;
		novo->ant=NULL;
		
	}else{
		
		node* aux = (node*) malloc(sizeof(node));
		
		aux=inicio->prox;
		
		novo->prox=inicio->prox;
		novo->ant=NULL;
		aux->ant=novo;
		
		inicio->prox = novo;
	}
}
//FUNÇÃO INSEREFINAL - PARA INSERIR NO FINAL DA LISTA
void InsereFinal(node* inicio){
	system("cls");

	node* novo = (node*) malloc(sizeof(node));
	
	if (!novo){
		printf("Nao foi possivel alocar a memoria!\n");
		exit(1);
	}
		printf("Informe o Nome do Cliente:");
		fflush(stdin);
		scanf("%c[^\n]",novo->nome_cliente);
		printf("Informe o Numero da Conta:");
		scanf("%i",novo->numero_conta);
		printf("Informe o Saldo do Cliente:");
		scanf("%d",novo->saldo);
	
	if(inicio->prox==NULL){
		
		novo->prox=NULL;
		novo->ant=NULL;
		
		inicio->prox=novo;
		
	}else{
		
		node* aux = (node*) malloc(sizeof(node));
		aux=inicio->prox;
		
		while(aux->prox!=NULL){
			aux=aux->prox;
		}
		
		novo->prox=NULL;
		novo->ant = aux;
		aux->prox=novo;
	}
	
}

//FUNÇÃO EXIBE - PARA EXIBIR TODAS AS CONTAS
void exibe(node* inicio){
	
	system("cls");
	
	node* aux =(node*)malloc(sizeof(node));
	aux=inicio;
	
	if(inicio->prox==NULL){
		printf("\nLista Vazia!\n");
		system("PAUSE");
	}else{
	
	while(aux->prox!=NULL){
		aux=aux->prox;

		printf("Cliente:%c\n Conta:%i\n Saldo:%f",aux->nome_cliente);
		printf("Conta: %i\n",aux->numero_conta);
		printf("Saldo: %f\n",aux->saldo);
		
	}
	
	system("pause");
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------
void remover(node* inicio){
	
	node* aux =(node*) malloc(sizeof(node));
	aux=inicio;
	int conta;
	
	if(inicio->prox==NULL){
		printf("Nao ha Clientes a Serem Removidos!");
		exit(1);
	}
	
	printf("\nConta a Ser Removida: \n");
	scanf("%i",&conta);
	
	//procura o elemento na lista
	
	while(aux->numero_conta!=conta){
		aux=aux->prox;
	}
	
	//ponteiro para liberarar a memoria depois da operação
	node* libera =(node*) malloc(sizeof(node));
	
	//verifica se e o primeiro elemento da lista
	if(inicio->prox==aux){
		
		//verifica se é o unico elemento da lista. tive que que fazer isso por causa de um bug, nao sei se é necessario
		if(aux->prox==NULL){
			libera=aux;
		    inicio->prox = NULL;
		    liberar(libera);
		}else{
	    libera = aux;
		aux=aux->prox;
		aux->ant =NULL;
		inicio->prox = aux;
		liberar(libera);
        }
		
	}//verifica se o elemento e o ultimo da lista
	else if(aux->prox==NULL){
		libera = aux;
		aux=aux->ant;
		aux->prox = NULL;
		liberar(libera);
	}//se nao o elemento esta no meio
	else{
		node* temp = (node*) malloc(sizeof(node));
		
		libera = aux;
		temp = aux->ant;
		aux = aux->prox;
		temp->prox = aux;
		aux->ant=temp;
		liberar(libera);
	}
	
	printf("\nCliente Removido Com Sucesso!\n");
	system("pause");
}
void liberar(node* libera){
	free(libera);
}

 

Postado
1 hora atrás, Matheus Morais tome disse:

node* aux =(node*)malloc(sizeof(node));
aux=inicio;

 

 

  • Reescreva assim que fica melhor, pois a memória de ponteiros (ponteiro é um tipo primitivo) já "vem de fabrica", atribuída durante sua declaração.
  1. node* aux= inicio;

 

1 hora atrás, Matheus Morais tome disse:

scanf("%c[^\n]",novo->nome_cliente);

  • Faça um teste isolado desse comando para averiguar se o resultado dentro da variável nome_cliente. é com esperado, pois eu acredito que não é.

 

  • Curtir 1
Postado
33 minutos atrás, AnsiC disse:
  • Reescreva assim que fica melhor, pois a memória de ponteiros (ponteiro é um tipo primitivo) já "vem de fabrica", atribuída durante sua declaração.
  1. 
    node* aux= inicio;

 

  • Faça um teste isolado desse comando para averiguar se o resultado dentro da variável nome_cliente. é com esperado, pois eu acredito que não é.

 

@AnsiC obrigado,fiz o teste,realmente era um erro nessa como tambem nas outras alterei os & pros corretos,funcionou,porém veio outro erro,o programa ainda esta fechando depois que tento cadastrar um cliente só,ele nao armazena na lista.(imagem do erro e a parte do codigo refeito ).

 

        image.png.0a1b60a2c1cb589b4f48d7481cc0694d.png

        printf("Informe o Nome do Cliente:");
        fflush(stdin);
        scanf("%s[^\n]",novo->nome_cliente);
        printf("Informe o Numero da Conta:");
        scanf("%d",novo->numero_conta);
        printf("Informe o Saldo do Cliente:");
        scanf("%f",novo->saldo);

 

 

Postado
8 horas atrás, Matheus Morais tome disse:

printf("Informe o Numero da Conta:");  scanf("%d",novo->numero_conta);
printf("Informe o Saldo do Cliente:"); scanf("%f",novo->saldo);

 

  • quando uma variável não é ponteiro e/ou vetor, devemos referenciar seu local inicial na memória colocando o operador & antes do seu nome (identificador).
  1. printf("Informe o Numero da Conta:");  scanf("%d", &novo->numero_conta);
    printf("Informe o Saldo do Cliente:"); scanf("%f", &novo->saldo);

     

  • Obrigado 1

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!