Ir ao conteúdo
  • Cadastre-se

C criar lista telefonica em linguagem c


Hokague

Posts recomendados

boa noite estou com esse trabalho pra entregar e não sei como desenvolver pois o curso está no meio e entrei agora agluem pode me ajudar

CRITÉRIOS DE AVALIAÇÃO:

 

À medida que as aulas forem dando sequência, o aluno deverá ser capaz de criar uma agendatelefônica, contendo as seguintes informações:

Cadastrar Pessoa;

- Nome;

- Telefone;

- Endereço;

 

Listar Pessoa;

- Nome;

- Telefone;

 

Alterar Pessoa;

- Alterar nome;

- Alterar telefone;

- alterar endereço;

 

Excluir Pessoa;

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

@Hokague    o melhor é você fazer por partes, uma de cada vez,  então faça primeiro a parte de cadastrar a pessoa,    então para cadastrar  você cria um vetor do tipo char para guardar o nome das pessoas, e outro para o endereço e outro do tipo int para o telefone,   crie a função cadastrar e nela coloque um loop do / while  enquanto quiser cadastrar,  e um contador começando de zero para indicar a posição nos vetores , e dentro do do / while pegue o nome da  pessoa, o telefone e o endereço, usando os comandos gets e scanf assim :

printf("Digite O Nome Da Pessoa ");
fflush(stdin);
gets( nome[contador] );
printf("Digite O Telefone ");
fflush(stdin);
scanf("%d",& telefone[contador]);
contador++;

e depois pergunta se quer cadastrar outra pessoa S / N  ,  e coloca o scanf para pegar a resposta se for S repete tudo de novo, senão passa pelo while , e terminou esta função de cadastrar .      Depois criar uma função para listar o que foi guardado nos vetores .   faça  essa primeira parte e poste aqui para podermos ver como está e em que podemos ajudar .

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

O enunciado está um pouco ambíguo. É para registrar somente um contato ou um número indefinido?
Não sei até onde está o curso, mas poderia usar struct para organizar melhor os dados.

Poderia dizer qual o compilador está usando? A maioria dos bons compiladores normalmente informa onde ocorreu o erro e às vezes até sugere como corrigi-lo.

adicionado 18 minutos depois
Em 3/31/2018 às 01:07, devair1010 disse:

@Hokague    o melhor é você fazer por partes, uma de cada vez,  então faça primeiro a parte de cadastrar a pessoa,    então para cadastrar  você cria um vetor do tipo char para guardar o nome das pessoas, e outro para o endereço e outro do tipo int para o telefone,   crie a função cadastrar e nela coloque um loop do / while  enquanto quiser cadastrar,  e um contador começando de zero para indicar a posição nos vetores , e dentro do do / while pegue o nome da  pessoa, o telefone e o endereço, usando os comandos gets e scanf assim :


printf("Digite O Nome Da Pessoa ");
fflush(stdin);
gets( nome[contador] );
printf("Digite O Telefone ");
fflush(stdin);
scanf("%d",& telefone[contador]);
contador++;

e depois pergunta se quer cadastrar outra pessoa S / N  ,  e coloca o scanf para pegar a resposta se for S repete tudo de novo, senão passa pelo while , e terminou esta função de cadastrar .      Depois criar uma função para listar o que foi guardado nos vetores .   faça  essa primeira parte e poste aqui para podermos ver como está e em que podemos ajudar .


Não é recomendado o uso de gets() nem de fflush(stdin).
A função gets() é obsoleta e extremamente perigosa no quesito segurança, e há várias alternativas melhores como até o próprio scanf, que não é nenhuma maravilha mas é muito melhor.

https://cwe.mitre.org/data/definitions/242.html

 

Já o uso do fflush(stdin) é desaconselhado por cair em comportamento indefinido. Alguns compiladores e sistemas operacionais permitem o uso, mas o comportamento esperado (limpar o buffer de entrada) não é garantido.
http://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html
 

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

@Hokague     esse erro é por que esse código está incompleto,   e como  você disse que está começando agora, então vou  colocar um exemplo  de como fazer , com apenas a função cadastrar , as funções de listar e alterar, você vendo como foi feita esta , fará as outras, então esse código pode ser assim :

#include <stdio.h>
#include <conio.h>
#include <windows.h>
int contador;/* colocando aqui antes da main a variável */
             /* será inicializada com valor zero*/
char nome[10][30],endereco[10][30],sair='s';
int telefone[10],i,op,contador;
void cadastrar(){/* esta é a função para cadastrar */
    do{
        printf("Digite O Nome Da Pessoa ");
        fflush(stdin);
        gets( nome[contador] );/* gets por é para pegar string */
              .                /* se fosse inteiro usaria scanf */
              .
              .
        aqui o código para cadastrar
        o telefone e o endereço
              .
              .
        contador++;
        printf("Quer Cadastrar Outra Pessoa S/N ");
        scanf("%c",&sair);
    }while(sair!='n');
}
void listar(){/* esta é a função para mostrar o que foi cadastrado */
    system("cls");
    printf("Listando Todos Os Cadastros !\n");
        .
        .
aqui coloque o código para
imprimir todos as pessoa e
endereços e telefone cadastrados
        .
        .
    printf("     Tecle");
    getch();
}
void alterar(){/* função para alterar os dados */
       .
       .
aqui coloque o código para fazer
as alterações nos dados da lista
       .
       .
}
int main(){/* aqui é a função main */
    do{
        system("cls");
        printf("===== menu da lista  =====\n\n");
        printf("1 - Cadastrar\n");
        printf("2 - Listar Todos\n");
        printf("3 - Alterar Dados\n");
        printf("4 - Sair Da Lista\nopcao -%c ",16);
        scanf("%d",&op);
        switch(op){
        case 1:
            cadastrar();
            break;
              .
              .
        aqui a chamada para as outras funções
              .
              .
        case 4:
            break;
        default:
            printf("Opcao Invalida !     Tecle");
            getch();
        }
    }while(op != 4 );
    return 0;
}

 

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

  • 2 anos depois...

 preciso de ajudar pra criar um codigo fonte, onde tenho que criar uma lista telefonica, sou iniciante e estou perdido em como realizar essa problema em LINGUAGEM C

RESOLUÇÃO 

Imagine que você é um desenvolvedor de sistemas freelancer, que possui uma ampla carteira de clientes. Como você não gosta dos sistemas existentes, você decide que irá criar sua própria aplicação de registro e manutenção de clientes.

Para isso, você deverá programar uma agenda em versão beta (versão de teste), que permite armazenar o cadastro de, no máximo, 5 (cinco) clientes por vez. 

A aplicação deverá armazenar, para cada cliente:

* Um código único, gerado automaticamente pelo sistema;
* Seu nome;
* Seu telefone;
* Seu e-mail.
 

O programa deverá apresentar um menu de opções ao usuário:
 

1 – Inserir um novo cadastro: ao selecionar essa opção, o usuário deverá ser capaz de informar todos os dados de um cliente. A saber: seu nome, telefone e e-mail. Caso o programa já tenha armazenado o número máximo de clientes (cinco), deverá ser exibida a mensagem “Agenda lotada!”. O código de um cadastro deve ser preenchido automaticamente pelo sistema e o usuário não deve ter a opção de alterar esse código.

2 – Mostrar todos os cadastros: ao selecionar essa opção, o programa deverá imprimir, na tela, para cada cliente: seu código, seu nome, seu telefone e seu e-mail. Essa opção deverá mostrar na tela apenas os dados dos clientes que foram cadastrados. Caso seja impressa alguma informação sobressalente ou faltem informações, será considerado um erro de programação. Caso nenhum cliente tenha sido cadastrado antes de selecionar essa opção, o programa deverá exibir a mensagem “Agenda vazia!”.

0 – Encerrar: ao selecionar essa opção, o programa se encerra.


Caso o usuário escolha uma opção que não conste no menu, o programa deverá exibir uma mensagem de erro como, por exemplo: “Erro: opção inválida!”. Caso contrário, o programa não deverá imprimir essa mensagem de erro.

 

DICA PARA SER UTILIZADAS 

Algumas funções que serão úteis durante o desenvolvimento do programa:
 

* system(“pause”) – chamada de sistema que “pausa” o programa e o faz aguardar pelo usuário;
* system(“cls”) – chamada de sistema que limpa os caracteres que foram impressos na tela anteriormente;
* fflush(stdin) – limpar o buffer do teclado. Essa função deve sempre ser utilizada após ter utilizado alguma função de entrada de dados como o scanf, gets, etc. Isso se dá pois em algumas situações o buffer do teclado mantém “lixo de memória”, prejudicando a próxima operação de entrada do programa;

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

Em 01/04/2018 às 15:14, Davi Silva Santos disse:

Não é recomendado o uso de gets() nem de fflush(stdin).
A função gets() é obsoleta e extremamente perigosa no quesito segurança, e há várias alternativas melhores como até o próprio scanf, que não é nenhuma maravilha mas é muito melhor.

https://cwe.mitre.org/data/definitions/242.html

 

Já o uso do fflush(stdin) é desaconselhado por cair em comportamento indefinido. Alguns compiladores e sistemas operacionais permitem o uso, mas o comportamento esperado (limpar o buffer de entrada) não é garantido.
http://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html

 

O risco de usar gets() é o mesmo de usar scanf() e provavelmente pouco relevante num curso e exercício claramente introdutórios. E postar um link para o CWE --- e em inglês --- num tópico para iniciantes talvez não seja assim relevante.

Talvez pudesse ter oferecido alguma dessas "alternativas melhores". Uma ao menos, ao invés de apenas jogar um link em inglês e uma afirmação.

 

No caso do Windows e da Microsoft foram escritas "versões seguras" de muitas dessas rotinas, como scanf_s() por exemplo. A Microsoft nunca conseguiu emplacar essas versões no padrão da linguagem, mas uma discussão está aqui, em português: https://docs.microsoft.com/pt-br/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l?view=vs-2019

Tem um comitê que decide o que vai para o padrão da linguagem e isso não teve votos para tal.

 

O risco existe porque essas rotinas não controlam o tamanho da entrada, como o tamanho da string que vai ler via gets(), e a entrada padrão pode ser redirecionada a partir de um arquivo e assim enfiar algum código através de uma ingênua e aparentemente inofensiva chamada a uma função para lê uma letrinha do teclado.

 

Para não correr o "risco de segurança": no caso de gets() por exemplo, apenas use fgets(). Em C a entrada padrão é stdin e fgets() é assim:
 

char* fgets(char *vetor, int tamanho, FILE * arquivo);

 

Nada de novo. Mas o int é o limite que não tem em gets().

char nome[30];

    printf("Digite O Nome Da Pessoa ");

// ao invés de 

    gets(nome);

// use 

    fgets(nome,29,stdin); // reserve uma posicao para o null que vem no fim da string....

fflush() e stdin

 

fflush() está definido apenas para buffers de saída, e isso existe porque os sistemas tem buffers para dados e decidem quando de fato enviar, por questões de eficiência. Então quando você tenta transmitir algo para outra máquina pela rede por exemplo, o sistema não manda cada letra por vez. Isso é feito em blocos e quando o sistema resolve. Mas em certos casos a gente precisa controlar pelo programa. Imagine um painel LCD por exemplo, com 200 letras. É razoável que o sistema mande o texto para o LCD ao ter 200 no buffer. Mas se o programa tem uma mensagem de 30 e quer mandar para o painel na hora seria o caso de um flush()...

 

Na entrada isso não faz tanto sentido, e fflush() não foi prevista para atuar na entrada. Há situações limite que podem justificar isso, como esse caso de ler ou não um ENTER ou algum dado que foi digitado mas não se quer ler mais. Mas não é padrão. O simples é usar algo como

void    flush(FILE* f)
{
	int c;
	while ((c = fgetc(f)) != '\n' && c != EOF);
};  // flush()

e escrever flush(stdin), que roda esse simples loop.

 

Em 01/04/2018 às 15:14, Davi Silva Santos disse:

alternativas melhores como até o próprio scanf, que não é nenhuma maravilha mas é muito melhor

 

scanf(), fscanf() e sscanf() foram escritas com um objetivo claro, que está no nome: scan formatted input, e são muto eficientes para isso, tipo uma versão portátil de awk e que foram escritas pelas mesmas pessoas na mesma época. 


O que seria uma "maravilha"? 

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

@devair1010 aaah entendi eu estava começando pelo switch e tentando colocar um loop dentro dele, então deve ser o inverso primeiro o loop e depois o switch

14 horas atrás, devair1010 disse:

@jhowzitos    comece fazendo o menu , coloque as opções dentro de um loop que pode ser o do/while e em seguida um switch para decidir o que fazer, e teste até que esteja funcionando bem , poste ele aqui para podermos ajudar .

entendi agora, 

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

5 horas atrás, jhowzitos disse:

@devair1010 aaah entendi eu estava começando pelo switch e tentando colocar um loop dentro dele, então deve ser o inverso primeiro o loop e depois o switch

entendi agora, 

da uma olhada por favor nessa primeira parte, ele executa porém da erro no final, consegue me ajudar por favor

teste1.png

testes.png

adicionado 0 minutos depois

a primeira fica num lup infinito, a segunda apresenta esse erro

 

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

poste o programa de um modo que possa ser copiado e testado eventualmente, por favor...

 

DICA PARA SER UTILIZADAS 

Algumas funções que serão úteis durante o desenvolvimento do programa:
 

* system(“pause”) – chamada de sistema que “pausa” o programa e o faz aguardar pelo usuário;
* system(“cls”) – chamada de sistema que limpa os caracteres que foram impressos na tela anteriormente;
* fflush(stdin) – limpar o buffer do teclado. Essa função deve sempre ser utilizada após ter utilizado alguma função de entrada de dados como o scanf, gets, etc. Isso se dá pois em algumas situações o buffer do teclado mantém “lixo de memória”, prejudicando a próxima operação de entrada do programa;

DICA PARA SER UTILIZADAS 

Algumas funções que serão úteis durante o desenvolvimento do programa:
 

* system(“pause”) – chamada de sistema que “pausa” o programa e o faz aguardar pelo usuário;
* system(“cls”) – chamada de sistema que limpa os caracteres que foram impressos na tela anteriormente;
* fflush(stdin) – limpar o buffer do teclado. Essa função deve sempre ser utilizada após ter utilizado alguma função de entrada de dados como o scanf, gets, etc. Isso se dá pois em algumas situações o buffer do teclado mantém “lixo de memória”, prejudicando a próxima operação de entrada do programa;

 

Outra dica

 

Desconfie das dicas acima. Ou as esqueça, se possível.

  • evite usar system() qualquer coisa. É uma bobagem. Seu programa não estará fazendo nada. Apenas chamando o sistema para executar algo. E abre uma porta para invasão e sacanagem, na medida em que alguém cria um cls ou pause e colocar no lugar do que você espera. 
    Se precisa limpar a tela, faça isso usando o sistema, no Windows. No Unix/Linux não existe essa noção de console.
  • "pause" é algo folclórico, e acho que se sabe que qualquer read() fread() fgets() getc() scanf() qualquer um desses vai parar a execução até o usuário teclar algo. E se alguém está recomendando isso para parar o programa ao final para a janela não fechar, que é o que já vi em notas de aula, é o pior.
    Seu ambiente de desenvolvimento --- o IDE que é masculino e não feminino --- tem uma opção para não fechar a janela ao final do programa, inserindo um "pause" por conta dele.E você não deve testar seus programas sempre no IDE. É um ambiente especial e não saberá se ele funciona de verdade ao sair desse "container". É ingenuidade nunca rodar o programa fora do IDE.
  • fflush() sequer funciona em geral para arquivos --- streams --- de entrada. E não deve ser usado de modo algum.O sistema usa buffers e tem boa razão para isso. Só se deve mexer nisso ao ter uma boa razão para tal. E não é tratar o fato de não ter lido certo os valores da entrada padrão, provavelmente.

Faça seu programa em torno dos dados e não em torno de menus e printf() scanf(). 


Com o tempo vai perceber que isso só te faz perder tempo e atrasa tudo. Apenas insira a interface depois de testar todas as funções. Procure usar constantes, literais. E ler de arquivos que pode salvar e editar e manter para repetir os testes. É pouco inteligente ficar no terminal digitando um item de cadastro por minuto para inventar 3 itens. E depois 3 produtos e afinal entrar em um menu pra listar. Não é produtivo. Vai levar 5min para entrar com um conjunto razoável de dados e aí se o programa cancela em 3s vai ficar furioso...

 

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

o codigo fonte é esse 
 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#include <conio.h>
#include <iostream>
#include<string.h>
#define MSG "Erro!"
// fflush(stdin); (usar sempre apos o ''scanf'
int main()
{
    setlocale(LC_ALL, "portuguese");
    
    char nome[100], email[100];
    int i, j, t, cel;
    printf ("digite o nome por favor: ");
    scanf ("%s", nome);
    printf ("digite o Email por favor: ");
    scanf ("%s", email);
    printf ("digite o numero por favor: ");
    scanf ("%d", &cel);
    i = 0;

    do
    {
        printf("\n %d -%s", i, nome);
        i++;
        printf("\n %d -%s", i, email);
        i++;
        printf("\n %d -%s", i, cel);
        i++;
    }
    while (i  <= 5);
    return (0);

teste1.png

testes.png

adicionado 5 minutos depois

huum 

1 hora atrás, arfneto disse:

poste o programa de um modo que possa ser copiado e testado eventualmente, por favor...

 

DICA PARA SER UTILIZADAS 

Algumas funções que serão úteis durante o desenvolvimento do programa:
 

* system(“pause”) – chamada de sistema que “pausa” o programa e o faz aguardar pelo usuário;
* system(“cls”) – chamada de sistema que limpa os caracteres que foram impressos na tela anteriormente;
* fflush(stdin) – limpar o buffer do teclado. Essa função deve sempre ser utilizada após ter utilizado alguma função de entrada de dados como o scanf, gets, etc. Isso se dá pois em algumas situações o buffer do teclado mantém “lixo de memória”, prejudicando a próxima operação de entrada do programa;


DICA PARA SER UTILIZADAS 

Algumas funções que serão úteis durante o desenvolvimento do programa:
 

* system(“pause”) – chamada de sistema que “pausa” o programa e o faz aguardar pelo usuário;
* system(“cls”) – chamada de sistema que limpa os caracteres que foram impressos na tela anteriormente;
* fflush(stdin) – limpar o buffer do teclado. Essa função deve sempre ser utilizada após ter utilizado alguma função de entrada de dados como o scanf, gets, etc. Isso se dá pois em algumas situações o buffer do teclado mantém “lixo de memória”, prejudicando a próxima operação de entrada do programa;

 

Outra dica

 

Desconfie das dicas acima. Ou as esqueça, se possível.

  • evite usar system() qualquer coisa. É uma bobagem. Seu programa não estará fazendo nada. Apenas chamando o sistema para executar algo. E abre uma porta para invasão e sacanagem, na medida em que alguém cria um cls ou pause e colocar no lugar do que você espera. 
    Se precisa limpar a tela, faça isso usando o sistema, no Windows. No Unix/Linux não existe essa noção de console.
  • "pause" é algo folclórico, e acho que se sabe que qualquer read() fread() fgets() getc() scanf() qualquer um desses vai parar a execução até o usuário teclar algo. E se alguém está recomendando isso para parar o programa ao final para a janela não fechar, que é o que já vi em notas de aula, é o pior.
    Seu ambiente de desenvolvimento --- o IDE que é masculino e não feminino --- tem uma opção para não fechar a janela ao final do programa, inserindo um "pause" por conta dele.E você não deve testar seus programas sempre no IDE. É um ambiente especial e não saberá se ele funciona de verdade ao sair desse "container". É ingenuidade nunca rodar o programa fora do IDE.
  • fflush() sequer funciona em geral para arquivos --- streams --- de entrada. E não deve ser usado de modo algum.O sistema usa buffers e tem boa razão para isso. Só se deve mexer nisso ao ter uma boa razão para tal. E não é tratar o fato de não ter lido certo os valores da entrada padrão, provavelmente.

Faça seu programa em torno dos dados e não em torno de menus e printf() scanf(). 


Com o tempo vai perceber que isso só te faz perder tempo e atrasa tudo. Apenas insira a interface depois de testar todas as funções. Procure usar constantes, literais. E ler de arquivos que pode salvar e editar e manter para repetir os testes. É pouco inteligente ficar no terminal digitando um item de cadastro por minuto para inventar 3 itens. E depois 3 produtos e afinal entrar em um menu pra listar. Não é produtivo. Vai levar 5min para entrar com um conjunto razoável de dados e aí se o programa cancela em 3s vai ficar furioso...

 

entao devo deixar o menu mais pro final é isso?? 
voce conseguer por gentileza dar uma pequena amostrar de como ficaria mais ou menos, nao quero que você resolva pois quero tentar e tal, seria mais ou menos como se você monsta-se a estrutura que deveria ficar mais ou menos, tipo so uma base de estruturas dentro da outras sem colocar as variaveis apeans um demonstrativo por gentilezaa.....

E obrigado por estar tirando um tempo pra ajudar, agradeço a todos isso é muito bom saber que sempre ha pessoas disposta a ajuadar

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

 

Pessoal então a respeito do código que tenho que montar onde haja uma lista telefônica em linguagem C, montei dessa forma, esta correta?e se nao tiver qual forma eu posso montar, preciso da ajuda de vcs, desde já muito obrigado a todos.
segue a baixo o codigo fonte e a imagem da execução que fiz usando o DEVC++ 

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#include <conio.h>
#include <iostream>
#include<string.h>
#define MSG "Erro!"
// fflush(stdin); (usar sempre apos o ''scanf'
int main()
{
    setlocale(LC_ALL, "portuguese");
    
        char nome[100], email[100];
        int Opcao, i, j, t, cel;    
        printf ("Digite 1- Inserir um novo cadastro\t2-Mostrar todos os cadastros\t0 - Encerrar:: ");
        scanf ("%d", &Opcao);
    
        switch (Opcao)
        {
        case 1:
                //1
                
                printf ("digite o nome por favor: ");
                scanf ("%s", nome);
                fflush(stdin);
                printf ("digite o Email por favor: ");
                scanf ("%s", email);
                fflush(stdin);
                printf ("digite o numero por favor: ");
                scanf ("%d", &cel);
                fflush(stdin);
                i = 0;
                    do
                      {                    
                        printf("\n %d -%s", i, nome);
                        i++;
                        printf("\n %d -%s", i, email);
                        i++;
                        printf("\n %d -%s", i, cel);
                        i++;
                     }
                    while (i  != 5);                    
                    return (0);                
        }
getchar();
printf("\n\n");
system("pause");
return(0);    
}
 

 

teste1.thumb.png.311f2a00c1688c155ad3b8a306756c99.png

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

1 hora atrás, jhowzitos disse:

entao devo deixar o menu mais pro final é isso?? 

 

23 horas atrás, devair1010 disse:

comece fazendo o menu , coloque as opções dentro de um loop que pode ser o do/while e em seguida um switch para decidir o que fazer, e teste até que esteja funcionando bem , poste ele aqui para podermos ajudar .


Pois é. Tenho uma opinião diferente da de @devair1010 :( e acho que já expliquei porque.

 

 

Comece pelos dados. Sempre pelos dados. 
 

2 horas atrás, arfneto disse:

Faça seu programa em torno dos dados e não em torno de menus e printf() scanf(). 


Com o tempo vai perceber que isso só te faz perder tempo e atrasa tudo. Apenas insira a interface depois de testar todas as funções. Procure usar constantes, literais. E ler de arquivos que pode salvar e editar e manter para repetir os testes. É pouco inteligente ficar no terminal digitando um item de cadastro por minuto para inventar 3 itens. E depois 3 produtos e afinal entrar em um menu pra listar. Não é produtivo. Vai levar 5min para entrar com um conjunto razoável de dados e aí se o programa cancela em 3s vai ficar furioso

 

Pois é. Mesmo em um programa sem praticamente nenhum tipo de processamento, como é o caso desse aqui.

 

Sobre seu programa:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#include <conio.h>
#include <iostream>
#include<string.h>
#define MSG "Erro!"

 

precisa mesmo de tudo isso? Provavelmente não. Esqueça conio.h. É uma herança de uma biblioteca dos anos '80. Não há nada relevante lá desde os '90. 

  • <iostream> é uma biblioteca para C++. esqueça isso
  • math.h em um programa de cadastro? esqueça isso
  • locale.h ? Precisa mesmo se preocupar com acentos e ponto decimal num programa como esse? Não creio
    char nome[100], email[100];
    int Opcao, i, j, t, cel;
    printf("Digite 1- Inserir um novo cadastro\t2-Mostrar todos os cadastros\t0 - Encerrar:: ");
    scanf("%d", &Opcao);

Não se expressou bem. É um cadastro só.

 

Sabe escrever uma função? Tem um livro? Seu curso tem um livro-texto? Sua escola assina uma biblioteca online que você possa usar?

 

Sobre os dados

 

Tem sempre muitas maneiras de escrever as coisas. 

 

Exemplo

 

Uma agenda é uma lista de itens e pode escrever algo mínimo mas que já tenha sentido

 

struct item
{
    char celular[20];
    char email[50];
    char fixo[20];
    int  id;
    char nome[50];
};
typedef struct item Item;

struct ag
{
    char nome[20];
    Item cad[20];
};
typedef struct ag Agenda;

 

typedef cria um alias, um sinônimo, e ajuda a criar nomes significativos e a não ter que ficar repetindo struct isso ou aquilo toda hora no programa

 

Vendo a lista fica claro que a agenda tem lugar para 20 itens e tem um nome para diferenciar de outras agendas que possa ter no programa. E os itens tem um número único, id, que você pode usar para identificar os caras com mais facilidade, 

 

E o programa?
 

Veja esse programa com esses dados

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct item
{
    char celular[20];
    char email[50];
    char fixo[20];
    int  id;
    char nome[50];
};
typedef struct item Item;

struct ag
{
    char nome[20];
    Item cad[20];
};
typedef struct ag Agenda;

int         alterar_pessoa(int, Agenda*);
int         excluir_pessoa(int, Agenda*);
int         listar_agenda(Agenda*);
int         listar_pessoa(int,Agenda*);
int         menu();

int main(int argc, char** argv)
{
    Agenda  iPhone;
    Agenda  Android;
    Agenda* pAg = NULL;

    Item exemplo_comum = {
        "999-123-456", // cel
        "[email protected]", // email
        "4567-8989", // fixo
        12, // id
        "Forum Clube" // nome
    };

    Item exemplo_99 =
    {
        .nome = "Willie Nelson",
        .email = "[email protected]",
        .id = 11,
        .fixo = "4567-8989",
        .celular = "(98) 999-999-999"
    };

    strcpy(iPhone.nome, "Agenda do iPhone");
    iPhone.cad[0] = exemplo_comum;
    Android.cad[0] = exemplo_99;
    return(0);
};  // main()

int         alterar_pessoa(int id, Agenda* ag){};
int         excluir_pessoa(int id, Agenda* ag){};
int         listar_agenda(Agenda* ag){};
int         listar_pessoa(int ident, Agenda* agenda){};
int         menu(){};

 

Ele não faz nada. Mas já tem dados! Duas agendas. E funções. E nem precisa de nada pra começar a testar. E nem tem um menu ainda.

 

Espero que ajude a entender o que estou te falando.

 

 

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

"Que Samba é esse que vejo...!!!"

 

Switch sim, gambiarra jamais!

"Sistema porco" cheio de gambiarras e dentre todos o principal motivo de baixas notas porque não faz sentido colar o código dentro da função main (é contradição) quando podemos fazer melhor.

 

Sua lógica, seu programa seus conteúdos

Outra coisa não muito rara é dá soluções com assuntos não apresentados, ou seja, você submete para analise um monte de palavras chaves e códigos que ainda não foram assistido em sala de aula...  deixando claro que desperdiçou o tempo na sala, o de leitura e de outros. 

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

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