Ir ao conteúdo
  • Cadastre-se
Jcleber

Erro na alteracao de cadastro em c

Recommended Posts

ola, ainda sou iniciante em C, e estou com algumas dúvidas!

estou criando um programa de cadastro de telefones, com vetores (sem criação de arquivos ainda), mas estou tendo problemas na opção "Alterar", onde altero um registro no cadastro.

Abaixo está meu código (ainda incompleto):

Lembrando que o problema que está acontecendo é que após cadastrar 2 pessoas, quando escolho a opção de alterar o numero de telefone da pessoa, o programa me pergunta o nome da pessoa a qual desejo alterar, digito o nome da pessoa, aí o programa me pede pra digitar o novo número de telefone; então eu digito e aperto "enter" mas o programa fica parado, esperando eu apertar "enter" novamente, e mesmo apertando quando vou ver a lista dos nomes e telefones, o número não foi alterado ou foi apagado!

 

#include <stdio.h>
#define MAX 4

//declaracoes de tipo
typedef struct tipoAgenda{
    char nome[20];
    char telefone[13];
};

//Prototipos

//Menu    
int main (void) {
    struct    tipoAgenda contatos[MAX];
    int op, i, quantidade=0, posicao=0;    
    char novonome[20];
    
    do{    
        printf("\n\n***AGENDA TELEFONICA***\n\n");
        printf("1. Incluir\n");
        printf("2. Listar\n");
        printf("3. Consultar\n");
        printf("4. Alterar\n");
        printf("5. Excluir\n");
        printf("0. Sair\n");
        printf("Escolha sua opÁ„o: ");
        scanf ("%d",&op);
        if ((op < 0 || op > 5)){
            printf("OpÁ„o digitada inv·lida");    
        }
        
        
        switch (op) {
            case 1: 
                if (posicao<MAX){
                    printf ("Digite o nome: ");
                    fflush(stdin);
                    gets (contatos[posicao].nome);
                    printf ("Digite o numero de telefone: ");
                    gets(contatos[posicao].telefone);
                    posicao++;
                }
                else
                    printf ("Lotou!");
                break;
                
            case 2: 
                printf ("\n\n***LISTA***\n\n");
                printf ("\nNome                    Telefone\n");
                for (i=0; i<posicao; i++){
                    printf ("\n%s                      %s\n",contatos.nome, contatos.telefone);    
                }
                break;
                
            case 3: 
                printf ("\n\n***CONSULTAR***\n\n");
                printf ("Digite o nome da pessoa a ser consultada: ");
                fflush(stdin);
                gets(novonome);
                for (i=0; i<posicao; i++){
                        if (strcmp(novonome, contatos.nome)==0){
                            printf ("Nome: %s\n", contatos.nome);        
                            printf ("Telefone: %10s\n", contatos.telefone);
                        }
                }    
            break;
            
            case 4:
                printf ("\n\n***ALTERAR TELEFONE***\n\n"); 
                printf ("Digite o nome da pessoa a ser consultada: ");
                fflush(stdin);
                gets (novonome);
                for (i=0; i<posicao;i++){
                    if (strcmp(novonome, contatos.nome)==0)
                        printf("Digite o novo numero de telefone: ");
                        fflush(stdin);
                        gets(contatos.telefone);
                    }
                    
        }
    }while (op !=0);
return 0;
}
 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria bom você colocar // no final da frase e adicionar comentarios sobre o que cada linha faz, ajuda um pouco (muito!)

faz assim, você executa seu programa, e vai escrevendo aqui quais opções você aperta, tipo

"liguei o programa, aperto 1 pra criar pessoa. aperto enter, digito o nome, aperto enter... e por ai vai,, ai dá pra localizar o erro certinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <stdio.h>
#define MAX 4      

//declaracoes de tipo
typedef struct tipoAgenda{
    char nome[20];
    char telefone[13];
};

//Prototipos

//Menu    
int main (void) {
    struct    tipoAgenda contatos[MAX];
    int op, i, quantidade=0, posicao=0;    
    char novonome[20];
    
    do{    
        printf("\n\n***AGENDA TELEFONICA***\n\n");
        printf("1. Incluir\n");
        printf("2. Listar\n");
        printf("3. Consultar\n");
        printf("4. Alterar\n");
        printf("5. Excluir\n");
        printf("0. Sair\n");
        printf("Escolha sua opcao: ");
        scanf ("%d",&op);
        if ((op < 0 || op > 5)){
            printf("opá, opcao invalida");    
        }
        
        
        switch (op) {
            case 1: 
                if (posicao<MAX){  // AQUI TEM QUE SER MENOR OU IGUAL, PRA PODER PEGAR OS 5 CNTATOS (0,1,2,3,4) 

                    printf ("Digite o nome: ");
                    fflush(stdin);
                    gets (contatos[posicao].nome);
                    printf ("Digite o numero de telefone: ");
                    gets(contatos[posicao].telefone);
                    posicao++;
                }
                else
                    printf ("Lotou!");
                break;
                
            case 2: 
                printf ("\n\n***LISTA***\n\n");
                printf ("\nNome                    Telefone\n");
                for (i=0; i<posicao; i++){    // i maior ou igual a POSICAO--------------------
                    printf ("\n%s                      %s\n",contatos.nome, contatos.telefone); -------------------------
                }
                break;
                
            case 3: 
                printf ("\n\n***CONSULTAR***\n\n");
                printf ("Digite o nome da pessoa a ser consultada: ");
                fflush(stdin);
                gets(novonome);
                for (i=0; i<posicao; i++){  // i maior ou igual a posicao----------------------------
                        if (strcmp(novonome, contatos.nome)==0){ ------------------------
                            printf ("Nome: %s\n", contatos.nome); ------------------------       
                            printf ("Telefone: %10s\n", contatos.telefone); ------------
                        }
                }    
            break;
            
            case 4:
                printf ("\n\n***ALTERAR TELEFONE***\n\n"); 
                printf ("Digite o nome da pessoa a ser consultada: ");
                fflush(stdin);
                gets (novonome);
                for (i=0; i<posicao;i++){  //i maior ou igual a posicao-----------------------
                    if (strcmp(novonome, contatos.nome)==0)    ------------------
                        printf("Digite o novo numero de telefone: ");
                        fflush(stdin);
                        gets(contatos.telefone);----------------
                    }
                    
        }
    }while (op !=0);
return 0;
}

 

 

 

pra andar nos contatos, sempre vai ser assim

contato[ contador].telefone

contato[contador].pessoa

e por ai vai....

 

olha se funciona ai @Jcleber

Compartilhar este post


Link para o post
Compartilhar em outros sites

Loiussanabio muito obrigado pela ajuda, prometo que colocarei os comentarios para facilitar o entendimento...vou testar aqui sua correção, mas o problema que eu vi era mais na alteração e não na listagem...

 

Ps. Muito bom esse fórum estou impressionado como foi rápido e bem atencioso!

 

Grato

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

louissanabio, os passos que estou executando sao os seguintes:

 

*Menu de opções aberto

 

digito  1, enter

digito flavio, enter

digito 1111, enter

*Pronto! 1 nome cadastrado!

digito 1, enter (pra cadastrar outro nome)

digito joao, enter

digito 2222, enter

*Pronto! 2 nomes cadastrados

 

digito 4, enter (alterar o numero de alguem)

*o programa me pergunta qual a pessoa que eu quero mudar o numero

digito flavio, enter

****NESSE MOMENTO O PROGRAMA PARA!

****APERTO ENTER NOVAMENTE!

*o programa me pergunta qual numero de telefone (novo numero)

digito 5555, enter

 

*o programa volta ao menu principal, então peço pra listar os nomes e numeros que estão salvos (para conferir se a alteração foi realizada), E SIM!, é alterado com sucesso, MAS O JOAO FICA SEM NUMERO DE TELEFONE, OU SEJA, O NUMERO DO FLAVIO FOI ALTERADO E O DE JOAO APAGADO!

 

segue abaixo o CODIGO com os comentarios!

 

 

//PROGRAMA DE CADASTRO DE TELEFONE

#include <stdio.h>
#define MAX 3


typedef struct tipoAgenda{ //STRUCT DECLARACOES DE TIPO
    char nome[20];
    char telefone[13];
};

int main (void) {  //MENU AGENDA    
    struct    tipoAgenda contatos[MAX]; //Vetor struct para salvar os nomes e telefones
    int op, i, quantidade=0;    
    char novonome[20];
    
    do{    
        printf("\n\n***AGENDA TELEFONICA***\n\n"); //MOSTRA NA TELA O MENU DE INCLUSAO
        printf("1. Incluir\n");
        printf("2. Listar\n");
        printf("3. Consultar\n");
        printf("4. Alterar\n");
        printf("5. Excluir\n");
        printf("0. Sair\n");
        printf("Escolha sua opÁ„o: ");
        scanf ("%d",&op);
        if ((op < 0 || op > 5)){
            printf("OpÁ„o digitada inv·lida");    
        }
        
        switch (op) {
            case 1:              //INSERE OS CONTATOS
                if (quantidade<MAX){ //PRECISO DE NO MAXIMO 3 CADASTROS PARA REALIZAR OS TESTES
                    printf ("Digite o nome: ");
                    fflush(stdin);
                    gets (contatos[quantidade].nome);//LE O NOME 
                    printf ("Digite o numero de telefone: ");
                    gets(contatos[quantidade].telefone); //LE O TELEFONE
                    quantidade++; 
                }
                else
                    printf ("Lotou!");
                break;
                
            case 2:              //LISTA OS CONTATOS
                printf ("\n\n***LISTA***\n\n");
                printf ("\nNome                    Telefone\n");
                for (i=0; i<quantidade; i++){
                    printf ("\n%s                      %s\n",contatos.nome, contatos.telefone);    
                }
                break;
                
            case 3:             //CONSULTA OS CONTATOS
                printf ("\n\n***CONSULTAR***\n\n");
                printf ("Digite o nome da pessoa a ser consultada: ");
                fflush(stdin);
                gets(novonome);
                for (i=0; i<quantidade; i++){
                        if (strcmp(novonome, contatos.nome)==0){
                            printf ("Nome: %s\n", contatos.nome);        
                            printf ("Telefone: %10s\n", contatos.telefone);
                        }
                }    
            break;
            
            case 4:             //ALTERAR O TELEFONE DO CONTATO
                printf ("\n\n***ALTERAR TELEFONE***\n\n"); 
                printf ("Digite o nome da pessoa a ser consultada: ");
                fflush(stdin);
                gets (novonome);
                for (i=0; i<quantidade;i++){
                    if (strcmp(novonome, contatos.nome)==0)
                        printf("Digite o novo numero de telefone: ");
                        fflush(stdin);
                        gets(contatos.telefone);
                    }
                    
        }
    }while (op !=0);
return 0;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Jcleber

//PROGRAMA DE CADASTRO DE TELEFONE

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100


typedef struct tipoAgenda  //STRUCT DECLARACOES DE TIPO
{
    char nome[20];
    char telefone[13];
};

int main (void)    //MENU AGENDA
{
    struct tipoAgenda contatos[MAX]; //Vetor struct para salvar os nomes e telefones
    int op, i, quantidade=;
    char novonome[20];

    do
    {
        printf("\n\n***AGENDA TELEFONICA***\n\n"); //MOSTRA NA TELA O MENU DE INCLUSAO
        printf("1. Incluir\n");
        printf("2. Listar\n");
        printf("3. Consultar\n");
        printf("4. Alterar\n");
        printf("5. Excluir\n");
        printf("0. Sair\n");
        printf("Escolha sua opÁ„o: ");
        scanf ("%d",&op);
        if ((op <  || op > 5))
        {
            printf("OpÁ„o digitada inv·lida");
        }

        switch (op)
        {
        case 1:              //INSERE OS CONTATOS
            if (quantidade<MAX)  //PRECISO DE NO MAXIMO 3 CADASTROS PARA REALIZAR OS TESTES
            {
                printf ("Digite o nome: ");
                fflush(stdin);
                gets (contatos[quantidade].nome);//LE O NOME
                printf ("Digite o numero de telefone: ");
                gets(contatos[quantidade].telefone); //LE O TELEFONE
                quantidade++;
            }
            else
                printf ("Lotou!");
            break;

        case 2:              //LISTA OS CONTATOS
            printf ("\n\n***LISTA***\n\n");
            printf ("\nNome                    Telefone\n");
            for (i=; i<quantidade; i++)
            {
                printf ("\n%s                      %s\n",contatos[i].nome, contatos[i].telefone);
            }
            break;

        case 3:             //CONSULTA OS CONTATOS
            printf ("\n\n***CONSULTAR***\n\n");
            printf ("Digite o nome da pessoa a ser consultada: ");
            fflush(stdin);
            gets(novonome);
            for (i=; i<quantidade; i++)
            {
                if (strcmp(novonome, contatos[i].nome)==)
                {
                    printf ("Nome: %s\n", contatos[i].nome);
                    printf ("Telefone: %10s\n", contatos[i].telefone);
                }
            }
            break;

        case 4:             //ALTERAR O TELEFONE DO CONTATO
            printf ("\n\n***ALTERAR TELEFONE***\n\n");
            printf ("Digite o nome da pessoa a ser consultada: ");
            fflush(stdin);
            gets (novonome);
            for (i=; i<quantidade; i++)
            {
                if (strcmp(novonome, contatos[i].nome)==)
                    printf("Digite o novo numero de telefone: ");
                fflush(stdin);
                gets(contatos[i].telefone);
            }

        }
    }
    while (op !=);
    return ;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Jcleber ajuda quem pode, agradece quem está precisando (se o codigo do amigo deu errado, pode ser falha sua ou dele, ne?)

brigas não levam a nada, alias, leva sim , leva a BANIMENTO!

agora com o seu problema, vamos la.

me passa o programa que você está usando pra compilar o algoritmo, que vou instala-lo aqui e arrumar seu programa. geralmente os compiladores mostram os erros, ai vou printar pra você ver onde está seu erro :D

 

se eu não responder hoje, amanha de manha vou entrar no site, ou de tarde tambem vou estar online, ai só chamar, ok?

 

pessoas que não são educadas aqui no forum, a galera não gosta de ajudar, então toma maracujina ai pra ficar rilex e a galera te ajudar ;)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@louissanabio ta tranquilo

ja descobri o erro

erro de inciante!!

mas se eu nao fosse iniciante eu nao viria ao forum!

o que me deixou indignado foi da pessoa copiar o meu codigo exatamente como estava e colar de volta como se tivesse me ajudando (ah tá, ele alterou o valor da constante que nao muda em nada codigo)!

ficou parecendo que ele realmente queria ajudar mas colou o codigo errado!

mas nao precisava dele ser grosso como ele foi!

mas enfim

grato pela atenção

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

posta ai o código pra galera então! qualquer coisa, a gente até melhora ele pra você, e você também vai ajudar a quem está com o mesmo problema ou procurando um código parecido com o seu :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci de botar "{" no if do case 4

ai somente espava pegando o primeiro comando abaixo do if.

 

segue abaixo o codigo correto

//PROGRAMA DE CADASTRO DE TELEFONE

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 100

 

 

typedef struct tipoAgenda  //STRUCT DECLARACOES DE TIPO

{

    char nome[20];

    char telefone[13];

};

 

int main (void)    //MENU AGENDA

{

    struct tipoAgenda contatos[MAX]; //Vetor struct para salvar os nomes e telefones

    int op, i, quantidade=0;

    char novonome[20];

 

    do

    {

        printf("\n\n***AGENDA TELEFONICA***\n\n"); //MOSTRA NA TELA O MENU DE INCLUSAO

        printf("1. Incluir\n");

        printf("2. Listar\n");

        printf("3. Consultar\n");

        printf("4. Alterar\n");

        printf("5. Excluir\n");

        printf("0. Sair\n");

        printf("Escolha sua opcao: ");

        scanf ("%d",&op);

        if ((op < 0 || op > 5))

        {

            printf("Opcao digitada invalida");

        }

 

        switch (op)

        {

        case 1:              //INSERE OS CONTATOS

            if (quantidade<MAX)  //PRECISO DE NO MAXIMO 3 CADASTROS PARA REALIZAR OS TESTES

            {

                printf ("Digite o nome: ");

                fflush(stdin);

                gets (contatos[quantidade].nome);//LE O NOME

                printf ("Digite o numero de telefone: ");

                gets(contatos[quantidade].telefone); //LE O TELEFONE

                quantidade++;

            }

            else

                printf ("Lotou!");

            break;

 

        case 2:              //LISTA OS CONTATOS

            printf ("\n\n***LISTA***\n\n");

            printf ("\nNome                    Telefone\n");

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

            {

                printf ("\n%s                      %s\n",contatos.nome, contatos.telefone);

            }

            break;

 

        case 3:             //CONSULTA OS CONTATOS

            printf ("\n\n***CONSULTAR***\n\n");

            printf ("Digite o nome da pessoa a ser consultada: ");

            fflush(stdin);

            gets(novonome);

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

            {

                if (strcmp(novonome, contatos.nome)==0)

                {

                    printf ("Nome: %s\n", contatos.nome);

                    printf ("Telefone: %10s\n", contatos.telefone);

                }

            }

            break;

 

        case 4:             //ALTERAR O TELEFONE DO CONTATO

            printf ("\n\n***ALTERAR TELEFONE***\n\n");

            printf ("Digite o nome da pessoa a ser consultada: ");

            fflush(stdin);

            gets (novonome);

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

            {

                if (strcmp(novonome, contatos.nome)==0){

printf("Digite o novo numero de telefone: ");

                fflush(stdin);

                gets(contatos.telefone);

}

            }

 

        }

    }

    while (op !=0);

    return 0 ;

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×