Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Postado

Oii galera então tava tentando criar uma agenda em C e fiz o seguinte programa que por algum motivo não roda.

Vocês podem me dizer onde está errado e se possível como arrumar o problema?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <conio.h>
 
struct Pessoa {
    char nome[30];
    char email[30];
    struct Telefone fone;
    char obs[50];
    };
 
    int main() {
         struct Pessoa contatos[100];
         struct Pessoa aux;
         int opcao,op;/// VARIAVEL NA ESCOLHA DO MENU
         int indice=0;///VARIAVEL QUE CONTEM O VALOR DO INDICE DO VETOR
         int i,encontrou=0;///INDICA A QDE DE REGISTRO
         char pesq[30];///GUARDAR O NOME DA PESQUISA
         int cod;
 
         do {
          system("cls");
          printf("---###--AGENDA DE CONTATOS--###---\n");
          printf("   ( 1 ) CADASTRAR CONTATO \n");
          printf("   ( 2 ) PESQUISAR UM CONTATO POR NOME \n");
          printf("   ( 3 ) LISTAR TODOS OS CONTATOS \n");
          printf("   ( 4 ) EXCLUIR UM CONTATO \n");
          printf("   ( 5 ) SAIR \n");
 
 
          printf("\n ESCOLHA UMA OPCAO:");
          scanf("%d",&opcao);
          fflush(stdin);
 
          switch(opcao) {
                   case 1:
                        system("cls");
                        printf("\n--**** CADASTRO DE CONTATO ****--");
                        printf("\n CODIGO:%i\n",indice);
                        printf("\n NOME E SOBRENOME:");
                        gets(contatos[indice].nome);
                        printf("\n EMAIL:");
                        gets(contatos[indice].email);
                        printf("\n TELEFONE:");
                        scanf("%d",&contatos[indice].fone);
                        indice++;
                        fflush(stdin);
                        break;
 
                    case 2:
                         system("cls");
                         printf("\n--**** CONSULTAR UM CONTATO POR NOME ****--");
                         printf("\nPESQUISAR:");
                         gets(pesq);
                         for(i=0; i<indice; i++) {
                         if(strcmp(pesq,contatos[i].nome)==0){
                         printf("\n CODIGO:%i",i);
                         printf("\n NOME E SOBRENOME:%s",contatos[i].nome);
                         printf("\n EMAIL:%s",contatos[i].email);
                         printf("\n TEL:%d",contatos[i].fone);
                         encontrou = 1;
                         }
                        } if (encontrou==0) {
                               printf("\n NENHUM REGISTRO ENCONTRADO!\n\n");
                              }
                        printf("\n");
                        system("pause");
                        break;
 
                  case 3:
                       printf("--**** LISTAR TODOS OS CONTATOS ****-- \n");
                       for(i=0; i<indice; i++){
                       printf("\nCODIGO: %i",i);
                       printf("\n NOME E SOBRENOME:%s",contatos[i].nome);
                       printf("\n EMAIL:%s",contatos[i].email);
                       printf("\n TEL:%d",contatos[i].fone);
                       printf("\n--------------------------------\n");
                       }
                       system("pause");
                       break;
 
               
            case 4:
                printf("\n--###----EXCLUIR CONTATO----###--\n");
                printf("\nINFORMA O CODIGO:");
                scanf("%i",&cod);
                printf("\n NOME E SOBRENOME:%s",contatos[cod].nome);
                printf("\n EMAIL:%s",contatos[cod].email);
                printf("\n TEL:%d",contatos[cod].fone);
                printf("\nDeseja EXCLUIR CONTATO? SIM(1)/NAO(2): ");
                scanf("%i",&i);
                if(i==1){
              for(i=cod; i<indice; i++){
                  strcpy(contatos[i].nome,contatos[i+1].nome);
                  strcpy(contatos[i].email,contatos[i+1].email);
                  contatos[i].fone=contatos[i+1].fone;
                  }
                  indice--;
                  }
                  break;
            case 5:
                  printf("\n------- SAIR-------");
                  getchar();
                  printf("\nadeus\n");
                  system("exit");
                  break;
 
 
 
                  system("cls");
 
 
               break;
 
    }     }while(opcao!=5);
         return 0;
}

 

  • Obrigado 1
Postado

@Leonardo Baldi     parece que você está fazendo esse código no editor do visual studio , e nele alguns comandos não são bem aceitos como o scanf que até funciona , mas para isso , precisa fazer uma manobra lá no começo para  não dar erro , e outros como o gets que já está muito Desatualizado , não sei se têm algum modo de poder usar , então melhor usar o fgets que é mais moderno , e aquela struct dentro da struct , parece não ser uma boa opção , então deletei ela e seu código está funcionando compilando e rodando , mas não sei se era bem isso que você pretendia fazer ,  e em todo caso aqui está seu código com muitas modificações :

#define _CRT_SECURE_NO_WARNINGS                                              // para usar scanf bem
#include <stdio.h>                                                           // biblioteca de entrada e saída
#include <stdlib.h>                                                          // para usar system
#include <string.h>                                                          // para trabalhar com string's
#include <locale.h>                                                          // idioma local
#include <conio.h>                                                           // com essa pode-se  usar o getch
#include <Windows.h>                                                         // funções mais avançadas do windows
#define cls system("cls");                                                   // meu cls exclusivo
struct Pessoa
{
    char nome [30],                                                          // tudo string's 
         email[30],                                                          // não vai fazer nenhum cálculo
         fone [18],                                                          // com esses dados
         obs  [50];                                                          // que serão armazenados aqui
};

int main() 
{
    struct Pessoa contatos[100];                                             // pode armaZenar até 100  Unidades dessas
    struct Pessoa aux;                                                       // praquê essa aqui ?
    int opcao, op;                                                           // VARIAVEL NA ESCOLHA DO MENU
    int indice = 0;                                                          // VARIAVEL QUE CONTEM O VALOR DO INDICE DO VETOR
    int i, encontrou = 0;                                                    // INDICA A QDE DE REGISTRO
    char pesq[30];                                                           // GUARDAR O NOME DA PESQUISA
    int cod;                                                                 // praquê esse aqui ?
                                                                             // praquê ficar pulando Linha  ?
    do 
    {
        cls                                                                  // acho assim mais fáciL
        printf("---###--AGENDA DE CONTATOS--###---     \n");
        printf("   ( 1 ) CADASTRAR CONTATO             \n");
        printf("   ( 2 ) PESQUISAR UM CONTATO POR NOME \n");
        printf("   ( 3 ) LISTAR TODOS OS CONTATOS      \n");
        printf("   ( 4 ) EXCLUIR UM CONTATO            \n");
        printf("   ( 5 ) SAIR Do Programa              \n");
        printf("         ESCOLHA UMA OPCAO : "            );
        fflush(stdin);                                                       // Limpeza No Teclado Antes De usar scanf
        scanf ("%d", &opcao                               );
        switch ( opcao ) 
        {
        case 1:
            cls                                                              // Limpa a Tela
            printf("\n--**** CADASTRO DE CONTATO ****--");
            printf("\n CODIGO ------------: %d ", indice);
            printf("\n NOME E SOBRENOME --: "           );
            fgets(contatos[indice].nome,29,stdin        );                   // gets desatualizado não func em compilad + modernos
            printf("\n EMAIL -------------: "           );
            fgets(contatos[indice].email,29,stdin       );
            printf("\n TELEFONE ----------: "           );
            fflush(stdin                                );                   //  Limpeza No Teclado Antes De usar scanf
            scanf("%s", contatos[indice].fone           );
            indice++;
            break;
        case 2:
            cls                                                              // Limpa a Tela
            printf("\n--**** CONSULTAR UM CONTATO POR NOME ****--");
            printf("\nHum Nome para PESQUISAR -: ");
            fgets(pesq,29,stdin);                                            // AQui já Faz huma Limpeza No Teclado
            for (i = 0; i < indice; i++)
                if (strcmp(pesq, contatos[i].nome) == 0)                     // pegou pesq e nome com fgets , os 2 têm \n no final
                {
                    printf("\n CODIGO ------------: %i", i                ); // Mostra o codigo
                    printf("\n NOME E SOBRENOME --: %s", contatos[i].nome ); // Escreve o nome e sobrenome
                    printf("\n EMAIL -------------: %s", contatos[i].email); // Escreve o EmaiL
                    printf("\n TEL ---------------: %s", contatos[i].fone ); // Escreve o Telefone
                    encontrou = 1;
                    break;
                }
            if ( ! encontrou )                                               // Se Não Encontrou
                printf("\n NENHUM REGISTRO ENCONTRADO!\n\n");                // Escreve essa mansagem na tela
            printf("\n");                                                    // pula uma linha para baixo
            system("pause");                                                 // espera pressionar alguma tecla
            break;                                                           // parada obrigatória do comando switch
        case 3:
            printf("--**** LISTAR TODOS OS CONTATOS ****-- \n");
            for (i = 0; i < indice; i++) 
            {
                printf("\nCODIGO -------------: %i", i                );     // Mostra o codigo
                printf("\n NOME E SOBRENOME --: %s", contatos[i].nome );     // Escreve o nome e sobrenome
                printf("\n EMAIL -------------: %s", contatos[i].email);     // Escreve o EmaiL
                printf("\n TEL ---------------: %s", contatos[i].fone );     // Escreve o Telefone
                printf("\n--------------------------------\n"         );
            }
            system("pause");
            break;
        case 4:
            printf("\n--###----EXCLUIR CONTATO----###--\n");
            printf("\nINFORME O CODIGO : ");
            scanf("%i", &cod);
            printf("\n NOME E SOBRENOME --: %s", contatos[cod].nome );       // Escreve o nome e sobrenome
            printf("\n EMAIL -------------: %s", contatos[cod].email);       // Escreve o EmaiL
            printf("\n TEL ---------------: %s", contatos[cod].fone );       // Escreve o Telefone
            printf("\nDeseja EXCLUIR CONTATO? SIM(1) / NAO(2): "    );
            scanf("%i", &i);
            if (i == 1)
            {
                for (i = cod; i < indice; i++)                               // puxar os Dados do final para baixo até essa posição indicada pelo indice
                {
                    strcpy(contatos[i].nome , contatos[i + 1].nome  );       // pega a de cima e puxa ela para baixo uma posição
                    strcpy(contatos[i].email, contatos[i + 1].email );       // pega a de cima e puxa ela para baixo uma posição
                    strcpy(contatos[i].fone , contatos[i + 1].fone  );       // pega a de cima e puxa ela para baixo uma posição
                }                                                            // puxou todas
                indice--;                                                    // decrementa o contador de cadastros 
            }
            break;
        case 5:
            printf("\n------- SAIR-------");                                 // escreve essa mensagem
            getchar();                                                       // não está funcionando , não sei porqu^, creio que seja Ultrapassada peLo Tempo
            printf("\n   ");                                                 // PuLar huma Linha
            for (i = 0; i < 85; i++)                                         // repetir 85 VeZes
            {
                printf("  -->  adeus\b\b\b\b\b\b\b\b\b\b\b"); Sleep(10);     // Move essa Palavra pela Tela
            }
            Sleep(1000);
            system("exit");                                                  // esse não faz nada !
            //break;                                                         // não precisa desse break
            cls                                                              // Limpar a TeLa
            break;                                                           // fim desse case
        default :                                                            // se nenhuma das opções foi digitada 
            printf("Opcao InvaLidA !\n");                                    // Mostra essa MensaGem de Alerta
            Sleep(2500);                                                     // espera por dois segundo e meio patra Vizualizar
        }
        printf("\n");                                                        // pula para a Linha de baixo do console
    } while (opcao != 5);                                                    // Repete enquanto não digita 0 número 5
    return 128;                                                              // Só para Ser DyFente
}

 

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