Ir para conteúdo
Fórum Script Brasil
  • 0

remover e reordenar dados de formulario


JonatasBorges

Pergunta

Olá pessoal, to com um problema em uma parte de um código que irei postar posteriormente.

Descrição do problema: fiz uma struct com alguns dados de formulário, e criei um menu para gerenciar o que deve ser realizado no sistema, inserir, remover, consultar e alterar dados.

meu maior problema é na hora de remover os dados de um vetor e reorganiza-los, outro problema é não hora de alterar uma string. vou postar o código e explicar, se alguem puder me guiar aonde está o erro fico muito grato!

 

remover: ele executa até o usuário clicar em "sim", ai o sistema para de funcionar e apresenta o mesmo erro quando não se colocar "&" antes da variável no scanf.

        case 1:
            {
                printf ("\nInforme o código?:");
                scanf ("%d", &dado);
                
                for (w = 0; w <= i; w++)
                {
                    if (dado == contatos[w].codigo)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja remover o cadastro acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &removecontrato);
                        
                        if (removecontrato == 1)
                        {
                            for (w = 0; w <= i; w++)
                            {
                                contatos[w].codigo = contatos[w+1].codigo;
                                strcpy(contatos[w].nome, contatos[w+1].nome);
                                contatos[w].telefone = contatos[w+1].telefone;
                                strcpy(contatos[w].email, contatos[w+1].email);
                                ultimo++;
                            }
                            contatos[ultimo].codigo = NULL;
                            strcpy(contatos[ultimo].nome, NULL);
                            contatos[ultimo].telefone = NULL;
                            strcpy(contatos[ultimo].email, NULL);
                            i--;
                        }
                        else if (removecontrato != 1 && removecontrato != 2)
                        {
                            printf ("\nOpção incorreta!");
                        }
                    }
                }
                break;
                }

alterar: quando digita o nome antigo ele sai do "case" e volta para o menu.

            case 2:
            {
                printf ("\nInforme o antigo nome?:");
                fflush(stdin);
                gets(sdado);
                    
                for (w = 0; w <= i; w++)
                {
                    if (sdado == contatos[w].nome)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja alterar o nome acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &alterarcontrato);
                        
                        if (alterarcontrato == 1)
                        {
                            printf ("Informe o novo nome: ");
                            fflush(stdin);
                            gets(contatos[w].nome);
                            
                            printf ("\nNome alterado para: ", contatos[w].nome);
                        }
                        else if (alterarcontrato != 1 && alterarcontrato != 2)
                            {
                            printf ("\nOpção incorreta!");
                            }
                    }
                }
            }
            break;

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Olá, acho que o que ocorre é apenas um erro simples na verificação.

Observe o código.

for (w = 0; w <= i; w++) //primeiro for para descobrir qual contato é o do código.
{
  if (dado == contatos[w].codigo){
	printf ("\n%i", contatos[w].codigo);
	printf ("\n%s", contatos[w].nome);
	printf ("\n%i", contatos[w].telefone);
	printf ("\n%s", contatos[w].email);
    printf ("\n\nDeseja remover o cadastro acima?");
	printf ("\n1 - Sim");
	printf ("\n2 - Não");
	printf ("\nOpção: ");
	scanf ("%i", &removecontrato);
                        
	if (removecontrato == 1){
		for (w = 0; w <= i; w++) //aqui você de novo, novamente, outra vez (kkk) usa o mesmo código.

Comentei as linhas que estão gerando conflito, cada variável, cada função tem seu contexto, e você tá bagunçando esse contexto quando dentro do for utiliza um contador e o repete dentro dele mesmo.

vetor.jpg.e1561fe23dfa4f21b36a44a444b600a4.jpg

Entendi sua ideia conforme a figura acima, e se for isso mesmo, então temos o principio de que só devemos mexer nos registros a frente do registro que queremos remover, então por quê iniciar um for com um contador igual a zero?

Ajuste o seu código para o seguinte:

if (removecontrato == 1){
  for (int exclusor=w; exclusor < i; exclusor++) //aqui vamos simplesmente começar do w pois ele é o registro que queremos excluirexclusor.
	{
		contatos[exclusor].codigo = contatos[exclusor+1].codigo;
		strcpy(contatos[exclusor].nome, contatos[exclusor+1].nome);
		contatos[exclusor].telefone = contatos[exclusor+1].telefone;
		strcpy(contatos[exclusor].email, contatos[exclusor+1].email);
		ultimo++;
	}
	contatos[ultimo].codigo = NULL;
	strcpy(contatos[ultimo].nome, NULL);
	contatos[ultimo].telefone = NULL;
	strcpy(contatos[ultimo].email, NULL);
	i--;

Caso ainda continue com erro, post todo o código para testar, pois com trechos assim agente arrisca um palpite, mas não tem como testar.

até mais.

Editado por rickayron
Indentação de código
Link para o comentário
Compartilhar em outros sites

  • 0

rickayron é exatamente isso que eu gostaria de fazer, porém deu erro novamente.

o código completo:

//Declaração das bibliotecas
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

//lista de dados a serem cadastrados
struct pessoa
{
int codigo;
int telefone;
char nome[30], email[30];
};

struct pessoa contatos[30];

//Variáveis de menu
int menuremove, menuconsulta, menualtera;

//Declaração de variáveis globais
int continua = 0, i = -1, w = 0; //Variáveis de controle

//Início variáveis globais de consulta/remoção
int dado;
char sdado[30];
//Fim variáveis globais de consulta/remoção

void inserir ()
{
        system("cls");
        printf ("\n*****INSERIR UM CADASTRO*****");
        printf ("\n\nInforme o código?: ");
        fflush(stdin);
        scanf ("%i", &contatos.codigo);
            
        printf ("\nInforme o nome?: ");
        fflush(stdin);
        gets(contatos.nome);
    
        printf ("\nInforme o telefone de contato?: ");
        fflush(stdin);
        scanf ("%i", &contatos.telefone);
    
        printf ("\nInforme o e-mail?: ");
        fflush(stdin);
        gets(contatos.email);
}

void remover ()
{
    int removecontrato, ultimo = 0;
    printf ("\n*****REMOVER UM CADASTRO*****");
    printf ("\n1 - Remover por código");
    printf ("\n2 - Remover por nome");
    printf ("\n3 - Remover por telefone");
    printf ("\n4 - Remover por email");
    printf ("\n0 - Sair");
    printf ("\nOpção: ");
    scanf ("%d", &menuremove);
    switch(menuremove)
    {
        case 1:
            {
                printf ("\nInforme o código?:");
                scanf ("%d", &dado);
                
                for (w = 0; w <= i; w++)
                {
                    if (dado == contatos[w].codigo)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja remover o cadastro acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &removecontrato);
                        
                        if (removecontrato == 1)
                        {
                            for (int exclusor=w; exclusor < i; exclusor++) //aqui vamos simplesmente começar do w pois ele é o registro que queremos excluirexclusor.
                                {
                                    contatos[exclusor].codigo = contatos[exclusor+1].codigo;
                                    strcpy(contatos[exclusor].nome, contatos[exclusor+1].nome);
                                    contatos[exclusor].telefone = contatos[exclusor+1].telefone;
                                    strcpy(contatos[exclusor].email, contatos[exclusor+1].email);
                                    ultimo++;
                                }
                                contatos[ultimo].codigo = NULL;
                                strcpy(contatos[ultimo].nome, NULL);
                                contatos[ultimo].telefone = NULL;
                                strcpy(contatos[ultimo].email, NULL);
                                i--;
                        }
                        
                    else if (removecontrato != 1 && removecontrato != 2)
                    {
                        printf ("\nOpção incorreta!");
                    }
                    }
                }
            
                break;
                }
                        
        case 2:
            {
                printf ("\nInforme o nome?:");
                scanf ("%d", &sdado);
                
                for (w = 0; w <= i; w++)
                {
                    if (sdado == contatos[w].nome)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja remover o cadastro acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &removecontrato);
                        
                        if (removecontrato == 1)
                        {
                            for (w = 0; w < i; w++)
                            {
                                contatos[w].codigo = contatos[w+1].codigo;
                                strcpy(contatos[w].nome, contatos[w+1].nome);
                                contatos[w].telefone = contatos[w+1].telefone;
                                strcpy(contatos[w].email, contatos[w+1].email);
                                ultimo++;
                            }
                            contatos[ultimo].codigo = NULL;
                            strcpy(contatos[ultimo].nome, NULL);
                            contatos[ultimo].telefone = NULL;
                            strcpy(contatos[ultimo].email, NULL);
                            i--;
                        }
                        else if (removecontrato != 1 && removecontrato != 2)
                            {
                            printf ("\nOpção incorreta!");
                            }
                    }
                }
            }
            break;
            
        case 3:
            {
                printf ("\nInforme o código?:");
                scanf ("%d", &dado);
                
                for (w = 0; w <= i; w++)
                {
                    if (dado == contatos[w].codigo)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja remover o cadastro acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &removecontrato);
                        
                        if (removecontrato == 1)
                        {
                            for (w = 0; w < i; w++)
                            {
                                contatos[w].codigo = contatos[w+1].codigo;
                                strcpy(contatos[w].nome, contatos[w+1].nome);
                                contatos[w].telefone = contatos[w+1].telefone;
                                strcpy(contatos[w].email, contatos[w+1].email);
                                ultimo++;
                            }
                            contatos[ultimo].codigo = NULL;
                            strcpy(contatos[ultimo].nome, NULL);
                            contatos[ultimo].telefone = NULL;
                            strcpy(contatos[ultimo].email, NULL);
                            i--;
                        }
                        else if (removecontrato != 1 && removecontrato != 2)
                            {
                            printf ("\nOpção incorreta!");
                            }
                    }
                }
            }
            break;
                        
        case 4:
            {
                printf ("\nInforme o email?:");
                scanf ("%d", &sdado);
                
                for (w = 0; w <= i; w++)
                {
                    if (sdado == contatos[w].email)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja remover o cadastro acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &removecontrato);
                        
                        if (removecontrato == 1)
                        {
                            for (w = 0; w < i; w++)
                            {
                                contatos[w].codigo = contatos[w+1].codigo;
                                strcpy(contatos[w].nome, contatos[w+1].nome);
                                contatos[w].telefone = contatos[w+1].telefone;
                                strcpy(contatos[w].email, contatos[w+1].email);
                                ultimo++;
                            }
                            contatos[ultimo].codigo = NULL;
                            strcpy(contatos[ultimo].nome, NULL);
                            contatos[ultimo].telefone = NULL;
                            strcpy(contatos[ultimo].email, NULL);
                            i--;
                        }
                        else if (removecontrato != 1 && removecontrato != 2)
                            {
                            printf ("\nOpção incorreta!");
                            }
                    }
                }
            }
            break;
                        
        case 0 : exit(0);
            
        default: printf ("\nOpção Inválida!");
        printf ("\n");
        system ("pause");
    }
}

void consultar ()
{
    
        printf ("\n*****CONSULTAR UM CADASTRO*****");
        printf ("\n1 - Consultar por código");
        printf ("\n2 - Consultar por nome");
        printf ("\n3 - Consultar por telefone");
        printf ("\n4 - Consultar por email");
        printf ("\n0 - Sair");
        printf ("\nOpção: ");
        scanf ("%d", &menuconsulta);
        switch(menuconsulta)
        {
            system("cls");
            case 1:
                {
                    printf ("Informe o código?:");
                    scanf ("%d", &dado);
                            
                    for (w = 0; w <= i; w++)
                    {
                        if (dado == contatos[w].codigo)
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                    }
                break;
                }
                        
            case 2:
                {
                    printf ("Informe o nome?:");
                    gets(sdado);
                    
                    for (w = 0; w <= i; w++)
                    {
                        if (sdado == contatos[w].nome)
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                    }
                break;
                }
                        
            case 3:
                {
                    printf ("Informe o telefone?:");
                    scanf ("%d", &dado);
                    
                    for (w = 0; w <= i; w++)
                    {
                        if (dado = contatos[w].telefone)
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                    }
                break;
                }
                        
            case 4:
                {
                    printf ("Informe o email?:");
                    gets(sdado);
                        
                    for (w = 0; w <= i; w++)
                    {
                        if (sdado == contatos[w].email)
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                    }
                break;
                }
                        
            case 0 : exit(0);
                
            default: printf ("\nOpção Inválida!");
            printf ("\n");
            system ("pause");
        }
}

void alterar ()
{
    int alterarcontrato;
    
        printf ("\n*****ALTERAR UM CADASTRO*****");
        printf ("\n1 - Alterar o código");
        printf ("\n2 - Alterar o nome");
        printf ("\n3 - Alterar o telefone");
        printf ("\n4 - Alterar o email");
        printf ("\n0 - Sair");
        printf ("\nOpção: ");
        scanf ("%d", &menualtera);
        switch(menualtera)
        {
            system("cls");
            case 1:
            {
                printf ("\nInforme o antigo código?:");
                fflush(stdin);
                scanf ("%d", &dado);
                    
                for (w = 0; w < i; w++)
                {
                    if (dado == contatos[w].codigo)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja alterar o código acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &alterarcontrato);
                        
                        if (alterarcontrato == 1)
                        {
                            printf ("Informe o novo código: ");
                            fflush(stdin);
                            scanf ("%i", &contatos[w].codigo);
                            
                            printf ("\nCódigo alterado para: ", contatos[w].codigo);
                        }
                        else if (alterarcontrato != 1 && alterarcontrato != 2)
                            {
                            printf ("\nOpção incorreta!");
                            }
                    }
                }
            break;
            }
                        
            case 2:
            {
                printf ("\nInforme o antigo nome?:");
                fflush(stdin);
                gets(sdado);
                    
                for (w = 0; w <= i; w++)
                {
                    if (sdado == contatos[w].nome)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja alterar o nome acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &alterarcontrato);
                        
                        if (alterarcontrato == 1)
                        {
                            printf ("Informe o novo nome: ");
                            fflush(stdin);
                            gets(contatos[w].nome);
                            
                            printf ("\nNome alterado para: ", contatos[w].nome);
                        }
                        else if (alterarcontrato != 1 && alterarcontrato != 2)
                            {
                            printf ("\nOpção incorreta!");
                            }
                    }
                }
            }
            break;
                    
            case 3:
            {
                printf ("\nInforme o antigo telefone?:");
                fflush(stdin);
                scanf ("%d", &dado);
                    
                for (w = 0; w <= i; w++)
                {
                    if (dado == contatos[w].telefone)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja alterar o telefone acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &alterarcontrato);
                        
                        if (alterarcontrato == 1)
                        {
                            printf ("Informe o novo telefone: ");
                            fflush(stdin);
                            scanf ("%i", &contatos[w].telefone);
                            
                            printf ("\nTelefone alterado para: ", contatos[w].telefone);
                        }
                        else if (alterarcontrato != 1 && alterarcontrato != 2)
                            {
                            printf ("\nOpção incorreta!");
                            }
                    }
                }
            break;
            }
                        
            case 4:
            {
                printf ("\nInforme o antigo email?:");
                fflush(stdin);
                gets(sdado);
                    
                for (w = 0; w <= i; w++)
                {
                    if (sdado == contatos[w].email)
                    {
                        printf ("\n%i", contatos[w].codigo);
                        printf ("\n%s", contatos[w].nome);
                        printf ("\n%i", contatos[w].telefone);
                        printf ("\n%s", contatos[w].email);
                        
                        printf ("\n\nDeseja alterar o email acima?");
                        printf ("\n1 - Sim");
                        printf ("\n2 - Não");
                        printf ("\nOpção: ");
                        scanf ("%i", &alterarcontrato);
                        
                        if (alterarcontrato == 1)
                        {
                            printf ("Informe o novo email: ");
                            fflush(stdin);
                            gets(contatos[w].email);
                            
                            printf ("\nEmail alterado para: ", contatos[w].email);
                        }
                        else if (alterarcontrato != 1 && alterarcontrato != 2)
                            {
                            printf ("\nOpção incorreta!");
                            }
                    }
                }
            break;
            }
                        
            case 0 : exit(0);
                
            default: printf ("\nOpção Inválida!");
            printf ("\n");
            system ("pause");
        }
}

void cons_todos ()
{
    system ("cls");
    printf ("\n*****CONSULTAR TODOS CADASTROS*****");
    for(w = 0; w <= i; w++)
    {
        printf ("\n%i", contatos[w].codigo);
        printf ("\n%s", contatos[w].nome);
        printf ("\n%i", contatos[w].telefone);
        printf ("\n%s", contatos[w].email);
        printf ("\n\n");
    }
}

void excluir_todos ()
{
    while (w <= i);
    {
        contatos[w].codigo = NULL;
        strcpy(contatos[w].nome, NULL);
        contatos[w].telefone = NULL;
        strcpy(contatos[w].email, NULL);
        printf ("\n\n");
        w++;
    }
}

//Declaração da função principal
int main ()
{
    setlocale (LC_ALL, "portuguese");
    
    //Declaração das variáveis locais
    int opcao;
do
{
    printf ("*** MENU - CADASTRO DE USUÁRIO ***");
    printf ("\n1 - Inserir um Cadastro");
    printf ("\n2 - Remover um Cadastro");
    printf ("\n3 - Consultar um Cadastro");
    printf ("\n4 - Alterar um Cadastro");
    printf ("\n5 - Consultar todos os Cadastros");
    printf ("\n6 - Remover uma lista de cadastros");
    printf ("\n0 - Sair");
    printf ("\nOpção: ");
    scanf ("%d", &opcao);
    
    switch (opcao)
    {
        case 1:
            {
            system ("cls");
            printf ("*** MENU - CADASTRO DE USUÁRIO ***");
            i = i + 1;
            inserir ();
            break;
            }
        case 2:
            {
            system ("cls");
            printf ("*** MENU - CADASTRO DE USUÁRIO ***");
            remover();
            break;
            }
        case 3:
            {
            system ("cls");
            printf ("*** MENU - CADASTRO DE USUÁRIO ***");
            consultar();
            break;
            }
        case 4:
            {
            system ("cls");
            printf ("*** MENU - CADASTRO DE USUÁRIO ***");
            alterar();
            break;
            }
        case 5:
            {
            printf ("*** MENU - CADASTRO DE USUÁRIO ***");
            cons_todos();
            break;
            }
            
        case 6:
            {
            printf ("*** MENU - CADASTRO DE USUÁRIO ***");
            excluir_todos ();
            break;
            }
        case 0 : exit(0);
                
        default: printf ("\nOpção Inválida!");
        printf ("\n");
        system ("pause");

    }
    
} while (opcao != 0);
}

Link para o comentário
Compartilhar em outros sites

  • 0

Para postar códigos use a tag CODE apertando o botão <> no topo do campo de respostas, assim você preserva a formatação do código e evita que o fórum faça alterações nele.

Por exemplo, o fórum "comeu" todos os [ i ] (sem espaços) do seu código pois no fórum isso é a tag para deixar o texto em itálico, então o texto do seu código está em itálico a partir do primeiro que foi encontrado (os demais apenas somem pq o texto já tá em itálico).

Editado por isrnick
Link para o comentário
Compartilhar em outros sites

  • 0
//Declaração das bibliotecas
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

//lista de dados a serem cadastrados
struct pessoa
{
int codigo;
int telefone;
char nome[30], email[30];
};

struct pessoa contatos[30];

//Variáveis de menu
int menuremove, menuconsulta, menualtera;

//Declaração de variáveis globais
int continua = 0, i = -1, w = 0; //Variáveis de controle

//Início variáveis globais de consulta/remoção
int dado;
char sdado[30];
//Fim variáveis globais de consulta/remoção

void inserir ()
{
		system("cls");
		printf ("\n*****INSERIR UM CADASTRO*****");
		printf ("\n\nInforme o código?: ");
		fflush(stdin);
		scanf ("%i", &contatos[i].codigo);
			
		printf ("\nInforme o nome?: ");
		fflush(stdin);
		gets(contatos[i].nome);
	
		printf ("\nInforme o telefone de contato?: ");
		fflush(stdin);
		scanf ("%i", &contatos[i].telefone);
	
		printf ("\nInforme o e-mail?: ");
		fflush(stdin);
		gets(contatos[i].email);
}

void remover ()
{
	int removecontrato, ultimo = 0;
	printf ("\n*****REMOVER UM CADASTRO*****");
	printf ("\n1 - Remover por código");
	printf ("\n2 - Remover por nome");
	printf ("\n3 - Remover por telefone");
	printf ("\n4 - Remover por email");
	printf ("\n0 - Sair");
	printf ("\nOpção: ");
	scanf ("%d", &menuremove);
	switch(menuremove)
	{
		case 1:
			{
				printf ("\nInforme o código?:");
				scanf ("%d", &dado);
				
				for (w = 0; w <= i; w++)
				{
					if (dado == contatos[w].codigo)
					{
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
						
						printf ("\n\nDeseja remover o cadastro acima?");
						printf ("\n1 - Sim");
						printf ("\n2 - Não");
						printf ("\nOpção: ");
						scanf ("%i", &removecontrato);
						
						if (removecontrato == 1)
						{
							for (int exclusor=w; exclusor < i; exclusor++) //aqui vamos simplesmente começar do w pois ele é o registro que queremos excluirexclusor.
								{
									contatos[exclusor].codigo = contatos[exclusor+1].codigo;
									strcpy(contatos[exclusor].nome, contatos[exclusor+1].nome);
									contatos[exclusor].telefone = contatos[exclusor+1].telefone;
									strcpy(contatos[exclusor].email, contatos[exclusor+1].email);
									ultimo++;
								}
								contatos[ultimo].codigo = NULL;
								strcpy(contatos[ultimo].nome, NULL);
								contatos[ultimo].telefone = NULL;
								strcpy(contatos[ultimo].email, NULL);
								i--;
						}
						
					else if (removecontrato != 1 && removecontrato != 2)
					{
						printf ("\nOpção incorreta!");
					}
					}
				}
			
				break;
				}
						
		case 2:
			{
				printf ("\nInforme o nome?:");
				scanf ("%d", &sdado);
				
				for (w = 0; w <= i; w++)
				{
					if (sdado == contatos[w].nome)
					{
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
						
						printf ("\n\nDeseja remover o cadastro acima?");
						printf ("\n1 - Sim");
						printf ("\n2 - Não");
						printf ("\nOpção: ");
						scanf ("%i", &removecontrato);
						
						if (removecontrato == 1)
						{
							for (w = 0; w < i; w++)
							{
								contatos[w].codigo = contatos[w+1].codigo;
								strcpy(contatos[w].nome, contatos[w+1].nome);
								contatos[w].telefone = contatos[w+1].telefone;
								strcpy(contatos[w].email, contatos[w+1].email);
								ultimo++;
							}
							contatos[ultimo].codigo = NULL;
							strcpy(contatos[ultimo].nome, NULL);
							contatos[ultimo].telefone = NULL;
							strcpy(contatos[ultimo].email, NULL);
							i--;
						}
						else if (removecontrato != 1 && removecontrato != 2)
							{
							printf ("\nOpção incorreta!");
							}
					}
				}
			}
			break;
			
		case 3:
			{
				printf ("\nInforme o código?:");
				scanf ("%d", &dado);
				
				for (w = 0; w <= i; w++)
				{
					if (dado == contatos[w].codigo)
					{
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
						
						printf ("\n\nDeseja remover o cadastro acima?");
						printf ("\n1 - Sim");
						printf ("\n2 - Não");
						printf ("\nOpção: ");
						scanf ("%i", &removecontrato);
						
						if (removecontrato == 1)
						{
							for (w = 0; w < i; w++)
							{
								contatos[w].codigo = contatos[w+1].codigo;
								strcpy(contatos[w].nome, contatos[w+1].nome);
								contatos[w].telefone = contatos[w+1].telefone;
								strcpy(contatos[w].email, contatos[w+1].email);
								ultimo++;
							}
							contatos[ultimo].codigo = NULL;
							strcpy(contatos[ultimo].nome, NULL);
							contatos[ultimo].telefone = NULL;
							strcpy(contatos[ultimo].email, NULL);
							i--;
						}
						else if (removecontrato != 1 && removecontrato != 2)
							{
							printf ("\nOpção incorreta!");
							}
					}
				}
			}
			break;
						
		case 4:
			{
				printf ("\nInforme o email?:");
				scanf ("%d", &sdado);
				
				for (w = 0; w <= i; w++)
				{
					if (sdado == contatos[w].email)
					{
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
						
						printf ("\n\nDeseja remover o cadastro acima?");
						printf ("\n1 - Sim");
						printf ("\n2 - Não");
						printf ("\nOpção: ");
						scanf ("%i", &removecontrato);
						
						if (removecontrato == 1)
						{
							for (w = 0; w < i; w++)
							{
								contatos[w].codigo = contatos[w+1].codigo;
								strcpy(contatos[w].nome, contatos[w+1].nome);
								contatos[w].telefone = contatos[w+1].telefone;
								strcpy(contatos[w].email, contatos[w+1].email);
								ultimo++;
							}
							contatos[ultimo].codigo = NULL;
							strcpy(contatos[ultimo].nome, NULL);
							contatos[ultimo].telefone = NULL;
							strcpy(contatos[ultimo].email, NULL);
							i--;
						}
						else if (removecontrato != 1 && removecontrato != 2)
							{
							printf ("\nOpção incorreta!");
							}
					}
				}
			}
			break;
						
		case 0 : exit(0);
			
		default: printf ("\nOpção Inválida!");
		printf ("\n");
		system ("pause");
	}
}

void consultar ()
{
	
		printf ("\n*****CONSULTAR UM CADASTRO*****");
		printf ("\n1 - Consultar por código");
		printf ("\n2 - Consultar por nome");
		printf ("\n3 - Consultar por telefone");
		printf ("\n4 - Consultar por email");
		printf ("\n0 - Sair");
		printf ("\nOpção: ");
		scanf ("%d", &menuconsulta);
		switch(menuconsulta)
		{
			system("cls");
			case 1:
				{
					printf ("Informe o código?:");
					scanf ("%d", &dado);
							
					for (w = 0; w <= i; w++)
					{
						if (dado == contatos[w].codigo)
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
					}
				break;
				}
						
			case 2:
				{
					printf ("Informe o nome?:");
					gets(sdado);
					
					for (w = 0; w <= i; w++)
					{
						if (sdado == contatos[w].nome)
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
					}
				break;
				}
						
			case 3:
				{
					printf ("Informe o telefone?:");
					scanf ("%d", &dado);
					
					for (w = 0; w <= i; w++)
					{
						if (dado = contatos[w].telefone)
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
					}
				break;
				}
						
			case 4:
				{
					printf ("Informe o email?:");
					gets(sdado);
						
					for (w = 0; w <= i; w++)
					{
						if (sdado == contatos[w].email)
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
					}
				break;
				}
						
			case 0 : exit(0);
				
			default: printf ("\nOpção Inválida!");
			printf ("\n");
			system ("pause");
		}
}

void alterar ()
{
	int alterarcontrato;
	
		printf ("\n*****ALTERAR UM CADASTRO*****");
		printf ("\n1 - Alterar o código");
		printf ("\n2 - Alterar o nome");
		printf ("\n3 - Alterar o telefone");
		printf ("\n4 - Alterar o email");
		printf ("\n0 - Sair");
		printf ("\nOpção: ");
		scanf ("%d", &menualtera);
		switch(menualtera)
		{
			system("cls");
			case 1:
			{
				printf ("\nInforme o antigo código?:");
				fflush(stdin);
				scanf ("%d", &dado);
					
				for (w = 0; w < i; w++)
				{
					if (dado == contatos[w].codigo)
					{
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
						
						printf ("\n\nDeseja alterar o código acima?");
						printf ("\n1 - Sim");
						printf ("\n2 - Não");
						printf ("\nOpção: ");
						scanf ("%i", &alterarcontrato);
						
						if (alterarcontrato == 1)
						{
							printf ("Informe o novo código: ");
							fflush(stdin);
							scanf ("%i", &contatos[w].codigo);
							
							printf ("\nCódigo alterado para: ", contatos[w].codigo);
						}
						else if (alterarcontrato != 1 && alterarcontrato != 2)
							{
							printf ("\nOpção incorreta!");
							}
					}
				}
			break;
			}
						
			case 2:
			{
				printf ("\nInforme o antigo nome?:");
				fflush(stdin);
				gets(sdado);
					
				for (w = 0; w <= i; w++)
				{
					if (sdado == contatos[w].nome)
					{
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
						
						printf ("\n\nDeseja alterar o nome acima?");
						printf ("\n1 - Sim");
						printf ("\n2 - Não");
						printf ("\nOpção: ");
						scanf ("%i", &alterarcontrato);
						
						if (alterarcontrato == 1)
						{
							printf ("Informe o novo nome: ");
							fflush(stdin);
							gets(contatos[w].nome);
							
							printf ("\nNome alterado para: ", contatos[w].nome);
						}
						else if (alterarcontrato != 1 && alterarcontrato != 2)
							{
							printf ("\nOpção incorreta!");
							}
					}
				}
			}
			break;
					
			case 3:
			{
				printf ("\nInforme o antigo telefone?:");
				fflush(stdin);
				scanf ("%d", &dado);
					
				for (w = 0; w <= i; w++)
				{
					if (dado == contatos[w].telefone)
					{
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
						
						printf ("\n\nDeseja alterar o telefone acima?");
						printf ("\n1 - Sim");
						printf ("\n2 - Não");
						printf ("\nOpção: ");
						scanf ("%i", &alterarcontrato);
						
						if (alterarcontrato == 1)
						{
							printf ("Informe o novo telefone: ");
							fflush(stdin);
							scanf ("%i", &contatos[w].telefone);
							
							printf ("\nTelefone alterado para: ", contatos[w].telefone);
						}
						else if (alterarcontrato != 1 && alterarcontrato != 2)
							{
							printf ("\nOpção incorreta!");
							}
					}
				}
			break;
			}
						
			case 4:
			{
				printf ("\nInforme o antigo email?:");
				fflush(stdin);
				gets(sdado);
					
				for (w = 0; w <= i; w++)
				{
					if (sdado == contatos[w].email)
					{
						printf ("\n%i", contatos[w].codigo);
						printf ("\n%s", contatos[w].nome);
						printf ("\n%i", contatos[w].telefone);
						printf ("\n%s", contatos[w].email);
						
						printf ("\n\nDeseja alterar o email acima?");
						printf ("\n1 - Sim");
						printf ("\n2 - Não");
						printf ("\nOpção: ");
						scanf ("%i", &alterarcontrato);
						
						if (alterarcontrato == 1)
						{
							printf ("Informe o novo email: ");
							fflush(stdin);
							gets(contatos[w].email);
							
							printf ("\nEmail alterado para: ", contatos[w].email);
						}
						else if (alterarcontrato != 1 && alterarcontrato != 2)
							{
							printf ("\nOpção incorreta!");
							}
					}
				}
			break;
			}
						
			case 0 : exit(0);
				
			default: printf ("\nOpção Inválida!");
			printf ("\n");
			system ("pause");
		}
}

void cons_todos ()
{
	system ("cls");
	printf ("\n*****CONSULTAR TODOS CADASTROS*****");
	for(w = 0; w <= i; w++)
	{
		printf ("\n%i", contatos[w].codigo);
		printf ("\n%s", contatos[w].nome);
		printf ("\n%i", contatos[w].telefone);
		printf ("\n%s", contatos[w].email);
		printf ("\n\n");
	}
}

void excluir_todos ()
{
	while (w <= i);
	{
		contatos[w].codigo = NULL;
		strcpy(contatos[w].nome, NULL);
		contatos[w].telefone = NULL;
		strcpy(contatos[w].email, NULL);
		printf ("\n\n");
		w++;
	}
}

//Declaração da função principal
int main ()
{
	setlocale (LC_ALL, "portuguese");
	
	//Declaração das variáveis locais
	int opcao;
do
{
	printf ("*** MENU - CADASTRO DE USUÁRIO ***");
	printf ("\n1 - Inserir um Cadastro");
	printf ("\n2 - Remover um Cadastro");
	printf ("\n3 - Consultar um Cadastro");
	printf ("\n4 - Alterar um Cadastro");
	printf ("\n5 - Consultar todos os Cadastros");
	printf ("\n6 - Remover uma lista de cadastros");
	printf ("\n0 - Sair");
	printf ("\nOpção: ");
	scanf ("%d", &opcao);
	
	switch (opcao)
	{
		case 1:
			{
			system ("cls");
			printf ("*** MENU - CADASTRO DE USUÁRIO ***");
			i = i + 1;
			inserir ();
			break;
			}
		case 2:
			{
			system ("cls");
			printf ("*** MENU - CADASTRO DE USUÁRIO ***");
			remover();
			break;
			}
		case 3:
			{
			system ("cls");
			printf ("*** MENU - CADASTRO DE USUÁRIO ***");
			consultar();
			break;
			}
		case 4:
			{
			system ("cls");
			printf ("*** MENU - CADASTRO DE USUÁRIO ***");
			alterar();
			break;
			}
		case 5:
			{
			printf ("*** MENU - CADASTRO DE USUÁRIO ***");
			cons_todos();
			break;
			}
			
		case 6:
			{
			printf ("*** MENU - CADASTRO DE USUÁRIO ***");
			excluir_todos ();
			break;
			}
		case 0 : exit(0);
				
		default: printf ("\nOpção Inválida!");
		printf ("\n");
		system ("pause");

	}
	
} while (opcao != 0);
}

Obrigado pela dica isrnicknão sabia.o Código correto está acima.problema está apenas no excluir!

Link para o comentário
Compartilhar em outros sites

  • 0

Teste sem as partes comentadas abaixo, pois acredito que são desnecessárias e são o que estão causando o problema.

    case 1:
    {
        printf ("\nInforme o código?:");
        scanf ("%d", &dado);

        for (w = 0; w <= i; w++)
        {
            if (dado == contatos[w].codigo)
            {
                printf ("\n%i", contatos[w].codigo);
                printf ("\n%s", contatos[w].nome);
                printf ("\n%i", contatos[w].telefone);
                printf ("\n%s", contatos[w].email);

                printf ("\n\nDeseja remover o cadastro acima?");
                printf ("\n1 - Sim");
                printf ("\n2 - Não");
                printf ("\nOpção: ");
                scanf ("%i", &removecontrato);

                if (removecontrato == 1)
                {
                    for (int exclusor=w; exclusor < i; exclusor++) //aqui vamos simplesmente começar do w pois ele é o registro que queremos excluir.
                    {
                        contatos[exclusor].codigo = contatos[exclusor+1].codigo;
                        strcpy(contatos[exclusor].nome, contatos[exclusor+1].nome);
                        contatos[exclusor].telefone = contatos[exclusor+1].telefone;
                        strcpy(contatos[exclusor].email, contatos[exclusor+1].email);
                        //ultimo++;
                    }
                    /*contatos[ultimo].codigo = NULL;
                    strcpy(contatos[ultimo].nome, NULL);
                    contatos[ultimo].telefone = NULL;
                    strcpy(contatos[ultimo].email, NULL);*/
                    i--;
                }

                else if (removecontrato != 1 && removecontrato != 2)
                {
                    printf ("\nOpção incorreta!");
                }
            }
        }

        break;
    }

"ultimo" está sendo incrementado mas não sei onde está sendo inicializado, mas ele é desnecessário de qualquer maneira, pois você não precisa colocar NULL na última posição, afinal i já foi decrementado (i--) então o que está nessa posição é irrelevante pois não será acessado, e quando um novo cadastro for feito o que está lá será sobrescrito/substituído.

(Note que todas as posições do vetor de contatos que ainda não foram usadas já tem lixo lá, afinal o espaço da memória que foi alocado para armazenar os valores desta struct foi usado anteriormente por outros programas, então até você atribuir algum valor para os campos da struct o que tem lá é lixo e irrelevante para o programa. Logo, essa última posição virou só mais uma com valores que não são relevantes para o programa.)

 

Edit: Aliás acredito que nesse for deveria ser apenas "menor que" (<) e não "menor ou igual a" (<=), correto?

for (w = 0; w <= i; w++)

 

Editado por isrnick
Link para o comentário
Compartilhar em outros sites

  • 0

Agora entendi, muito obrigado isrnick, com o exclusor eu pego o vetor a ser excluído e copio o vetor seguinte no lugar dele. Com isso o ultimo veto vai aparecer novamente e para excluir ele o "i--" faz esse trabalho, fazendo com que a sequência diminua em 1, com isso o ultimo vetor deixa de existir, correto?

Link para o comentário
Compartilhar em outros sites

  • 0
7 horas atrás, JonatasBorges disse:

Agora entendi, muito obrigado isrnick, com o exclusor eu pego o vetor a ser excluído e copio o vetor seguinte no lugar dele. Com isso o ultimo veto vai aparecer novamente e para excluir ele o "i--" faz esse trabalho, fazendo com que a sequência diminua em 1, com isso o ultimo vetor deixa de existir, correto?

Exato. ;-)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...