Search the Community

Showing results for tags 'c'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Programação & Desenvolvimento
    • ASP
    • PHP
    • .NET
    • Java
    • C, C++
    • Delphi, Kylix
    • Lógica de Programação
    • Mobile
    • Visual Basic
    • Outras Linguagens de Programação
  • WEB
    • HTML, XHTML, CSS
    • Ajax, JavaScript, XML, DOM
    • Editores
  • Arte & Design
    • Corel Draw
    • Fireworks
    • Flash & ActionScript
    • Photoshop
    • Outros Programas de Arte e Design
  • Sistemas Operacionais
    • Microsoft Windows
    • GNU/Linux
    • Outros Sistemas Operacionais
  • Softwares, Hardwares e Redes
    • Microsoft Office
    • Softwares Livres
    • Outros Softwares
    • Hardware
    • Redes
  • Banco de Dados
    • Access
    • MySQL
    • PostgreSQL
    • SQL Server
    • Demais Bancos
  • Segurança e Malwares
    • Segurança
    • Remoção De Malwares
  • Empregos
    • Vagas Efetivas
    • Vagas para Estágios
    • Oportunidades para Freelances
  • Negócios & Oportunidades
    • Classificados & Serviços
    • Eventos
  • Geral
    • Avaliações de Trabalhos
    • Links
    • Outros Assuntos
    • Entretenimento
  • Script Brasil
    • Novidades e Anúncios Script Brasil
    • Mercado Livre / Mercado Sócios
    • Sugestões e Críticas
    • Apresentações

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

Found 399 results

  1. Boa noite a todos. Estou tentando gravar uma struct em um arquivo, mas toda vez que executo, o arquivo continua vazio. Estou usando o xcode em mac air. E já verifiquei se o arquivo tem as permissões exigidas. Segue o código: // // main.c // arquivos3 // #include <stdio.h> #include <stdlib.h> struct Pessoa{ char nome[20]; unsigned int idade; float altura; }; int main(int argc, const char * argv[]) { // insert code here... FILE* ptr; char* filename = "arq_teste.dat"; char* modo_gravacao = "w"; struct Pessoa pessoa = {"Fernando Santos", 42, 1.75}; //Abre o arquivo para gravação; se ocorrer erro o programa aborta. if ((ptr = fopen(filename, modo_gravacao)) == NULL) { puts("Erro ao abrir o arquivo!"); exit(1); } fwrite(&pessoa, sizeof(struct Pessoa), 1, ptr); fclose(ptr); return 0; }
  2. Olá, boa tarde. Estou com duvida sobre o porquê do meu código não rodar. Eu pesquisei na internet e aparentemente ele esta 100%, sem nenhum erro. #include <stdio.h> #include <stdlib.h> void somatorioMedia(float *a, int n, float *somatorio, float *media); int main(){ int i; float a[10]; int n = 10; float *somatorio; *somatorio = 0; float *media; *media = 0; for(i=0; i<10; i++){ printf("n[%i]: ", i); scanf("%f", &a[i]); } somatorioMedia(a, n, somatorio, media); printf("Somatorio: %.2f\n", *somatorio); printf("Media: %.2f", *media); return 0; } void somatorioMedia(float *a, int n, float *somatorio, float *media){ int i; for(i=0; i<n; i++){ *somatorio += a[i]; } *media = *somatorio / n; }
  3. elabore um programa que leia dois numeros decimais inteiros de no maximo 32 bits e determine, bit a bit, quais bits são iguais nos dois numeros, e dos que forem igual se são '' 0 '' ou '' 1''. Por exemplo, os numeros 0 e 255 contem 24 bits iguais (bit8...bit31), em zero, e 8 bits diferente ( bit0...bit7). nesse caso a impressao seria: bits iguais: || valor 7 0 8  0 9 0 . . . 31 0
  4. elabore um programa que leia dois numeros decimais inteiros de no maximo 32 bits e determine, bit a bit, quais bits são iguais nos dois numeros, e dos que forem igual se são '' 0 '' ou '' 1''. Por exemplo, os numeros 0 e 255 contem 24 bits iguais (bit8...bit31), em zero, e 8 bits diferente ( bit0...bit7). nesse caso a impressao seria: bits iguais: || valor 7 0 8 0 9 0 . . . 31 0
  5. teylorgnkn

    ERRO DE KEY

    Estou com o seguinte erro, vou importar minha base e resulta em apenas 1 erro. E como não tenho muito conhecimento com sql, não sei como resolver. ERRO: Erro Comando SQL: /*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS Mensagens do MySQL : #1064 - Você tem um erro de sintaxe no seu SQL próximo a '' na linha 1
  6. Oi boa tarde. Faça um programa que realize o cadastro de contas bancárias com as seguintes informações: número da conta, nome do cliente e saldo. O banco permitirá o cadastramento de apenas 15 contas e não pode haver mais que uma conta com o mesmo número. O programa deverá usar REGISTRO em sua estrutura de dados e criar um menu de opções como a seguir: Menu de Opções: 1 - Cadastrar Contas 2 - Visualizar contas 3 - Exclusão de contas 4 - Sair Então... neste exercício eu fiz uma função para cada uma das 3 primeiras opções. Na verdade não sei explicar direito o porque de ocorrer isso. Problema 1, quando mando iniciar o programa, e vou no menu 2 e depois no 3, para constatar que não tem nada cadastrado, mas ele visualiza aqueles dados tipo quando a variável esta com lixo. Problema 2, quando vou no menu 1 para cadastrar uma conta, fala que já tem conta cadastrada, quando na vdd não tem, ai vou la visualizar o que cadastrei e ela não aparece... Eu criei na main() um for que é para zerar a struct quando o programa é executado. Basicamente é isso. Primeiramente eu fiz sem utilizar as funções, tudo dentro da main, cada case com a sua própria solução, e ficou perfeito, insere, pesquisa, exclui tanto por nome quanto por conta. Mas querendo utilizar função para cada case escolhida, já não deu certo... Me ajudem. Segue o código: #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> #define MAX 3 struct conta{ char cliente[50]; int cc; float saldo; }; int cadConta(){ struct conta add[MAX]; int i, ncc, contador, cont = 0; do{ printf("Digite o Numero da Conta: "); scanf("%d",&ncc); for(i=0; i<MAX; i++){ if(ncc != add[i].cc){ contador++; } } if(contador == MAX){ add[cont].cc = ncc; printf("Digite o Nome do Cliente: "); scanf("%s", &add[cont].cliente); printf("Digite o saldo: "); scanf("%f", &add[cont].saldo); printf("\nConta cadastrada com sucesso!\n"); printf("\n"); contador = 0; } else{ cont = cont - 1; printf("Conta já existe!!\n"); contador = 0; } cont++; }while(cont < MAX); system("cls"); return(0); } int visualizaConta(){ int i, tem, verificador, tipo, cc; struct conta view[MAX]; char cli[50] = {"NULL"}; do{ printf("\nSelecione a opção que melhor lhe atenda...\n"); printf("1 - Visualizar contas p/ Cliente\n"); printf("2 - Visualizar conta p/ Conta\n"); printf("3 - Visualizar todas as contas\n"); printf("4 - Sair deste Menu\n"); printf("\nDigite uma opção: "); scanf("%i", &tipo); switch(tipo){ case 1: system("cls"); printf("\n\n"); printf("Digite o nome do cliente: "); scanf("%s", &cli); tem = 0; for(i=0; i<MAX; i++){ verificador = (strcmp(cli, view[i].cliente)); if(verificador == 0){ printf("\n\n"); printf("Conta: %d - Cliente: %s - Saldo: %.2f\n", view[i].cc, view[i].cliente, view[i].saldo); tem = 1; } } if(tem == 0){ printf("\n\nNão existe conta cadastrada para este cliente!!\n"); } system("pause"); system("cls"); break; case 2: system("cls"); printf("\n\n"); printf("Digite o Numero da Conta: "); scanf("%d", &cc); tem = 0; for(i=0; i<MAX; i++){ if(cc == view[i].cc){ printf("Conta: %d - Cliente: %s - Saldo: %.2f\n", view[i].cc, view[i].cliente, view[i].saldo); tem = 1; } } if(tem == 0){ printf("\nNão existe esta conta cadastrada!!\n"); } system("pause"); system("cls"); break; case 3: for(i=0; i<MAX; i++){ printf("Conta: %d - Cliente: %s - Saldo: %.2f\n", view[i].cc, view[i].cliente, view[i].saldo); } system("pause"); system("cls"); break; default: printf("Opção de Sair... XauXau"); system("cls"); } }while(tipo != 4); return(0); } int excluir(){ int op = 0, excluir, tem, i, verificador; char excluirC[50] = {"NULL"}; struct conta exc[MAX]; do{ printf("\nSelecione a opção que melhor lhe atenda...\n"); printf("\n1 - Excluir conta p/ Conta"); printf("\n2 - Excluir conta p/ Cliente"); printf("\n3 - Sair deste Menu\n"); printf("\nDigite uma opção: "); scanf("%i", &op); switch(op){ case 1: printf("Digite o Numero da Conta: "); scanf("%d", &excluir); tem = 0; for(i=0; i<MAX; i++){ if(excluir == exc[i].cc) tem = 1; } if(tem == 1){ printf("\nConta Localizada!!\n"); } if(tem == 0){ printf("\nNão existe esta conta cadastrada!!\n"); system("cls"); } else{ for(i=0; i<MAX; i++){ if(excluir == exc[i].cc){ exc[i].cc = 0; strcpy(exc[i].cliente, "NULL"); exc[i].saldo = 0.0; printf("\nConta Excluida com sucesso!!\n"); system("pause"); system("cls"); } } } system("pause"); system("cls"); break; case 2: printf("Digite o Nome do Cliente: "); scanf("%s", &excluirC); tem = 0; for(i=0; i<MAX; i++){ verificador = (strcmp(excluirC, exc[i].cliente)); if(verificador == 0){ tem = 1; exc[i].cc = 0; strcpy(exc[i].cliente, "NULL"); exc[i].saldo = 0.0; printf("\nConta Localizada!!\n"); printf("\nConta Excluida com sucesso!!\n"); system("pause"); system("cls"); } } if(tem == 0){ printf("\nNão existe esta conta cadastrada!!\n"); system("cls"); } break; default: printf("Opção de Sair... XauXau"); system("cls"); } }while(op != 3); } int main() { setlocale(LC_ALL,"portuguese"); int num = 0, i, cadConta(), visualizaConta(), excluir(); struct conta banco[MAX]; printf("8) Faça um programa que realize o cadastro de contas bancárias com as seguintes informações: número da conta, nome do cliente e saldo. O banco permitirá o cadastramento de apenas 15 contas e não pode haver mais que uma conta com o mesmo número. O programa deverá usar REGISTRO em sua estrutura de dados e criar um menu de opções como a seguir:\nMenu de Opções:\n\n"); for(i=0; i<MAX; i++){ strcpy(banco[i].cliente, "NULL"); banco[i].cc = 0; banco[i].saldo = 0.0; } do{ printf("\nMenu de Opções:\n1 - Cadastrar Contas\n2 - Visualizar contas\n3 - Excluir contas\n4 - Sair.\n\n"); printf("\nDigite uma opção: "); scanf("%i", &num); switch(num){ case 1: system("cls || clear"); printf("", cadConta()); break; case 2: system("cls || clear"); printf("", visualizaConta()); break; case 3: system("cls || clear"); printf("", excluir()); break; case 4: system("cls || clear"); printf("Opcão de Sair!! Xau Xau\n"); break; default: system("cls || clear"); } }while(num != 4); return 0; }
  7. Boa tarde eu tenho um exercicio sobre linguagem C e eu não entendi como devo fazer, preciso do código para a resolução do exercico, alguém pode me ajudar? Pergunta: Considere que você é um freelancer desenvolvedor de sistemas desktop. Para iniciar seu portfólio, você decide testar uma ideia de sistema para bibliotecas. Assim, você resolve que criará um programa como Prova de Conceito para validar suas ideias e também para poder mostrar para seus possíveis clientes. Dessa forma, seu programa, em versão beta (versão de testes), deverá permitir armazenar o cadastro de, no máximo, 5 (cinco) livros por vez (por execução do programa). Para cada livro, a aplicação deverá armazenar as seguintes informações: * Um código único, gerado automaticamente pelo sistema; * O nome dos autores da obra; * O nome da obra; * O nome da editora. 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 livro. A saber: seu nome, os autores, e o nome da editora; o código do cadastro não deve ser informado pelo usuário pois o programa deve gerar automaticamente. Caso o programa já tenha armazenado o número máximo de livros (cinco), deverá ser exibida uma mensagem de erro: “Sistema de cadastro lotado. Não é possível armazenar mais informações!”. 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. É importante salientar que para cada cadastro, deve-se ter um código distinto, ou seja, não deve ser possível que existam dois cadastros com o mesmo código, ao mesmo tempo; 2 – Mostrar todos os cadastros: ao selecionar essa opção, o programa deverá imprimir, na tela, para cada livro, seu código, seu nome, os autores e a editora. Essa opção deverá mostrar na tela apenas os dados de livros que foram cadastrados. Caso seja impressa alguma outra informação sobressalente, ou caso faltem informações previamente cadastradas, será considerado um erro de programação. Caso nenhum cliente tenha sido cadastrado, antes de tentar executar essa opção (2 - Mostrar todos os cadastros), o programa deve exibir a mensagem “Lista vazia!”; 0 – Encerrar: o programa deve ser encerrado se, e somente se, o usuário escolher essa opção.Observações importantes:Sempre que o usuário desejar executar as opção 1 ou 2 (exceto 0), o programa deve realizar o que é pedido no enunciado e, logo após isso, o programa deve retornar ao menu, dando ao usuário a possibilidade de executar novamente alguma das opções listadas no menu. 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!”; retornando ao menu logo em seguida. Caso contrário, o programa não deverá imprimir essa mensagem de erro, ou seja, se o usuário tentar executar as opções 0, 1 ou 2, o programa não entra em estado de erro.
  8. Eu fiz esse código aí para testar o recebimento de valores em uma matriz e impressão dos mesmo só que os dados que eu insiro quando o programa é compilado se alteram e fica esse trem doido aí se alguém puder me dizer o que tenho que fazer pra consertar agradeço. meu código: #include <stdio.h> #include <math.h> int ze[3][3]; int i=0,j=0,k=0,l=0; int main(void){ for(i=0; i<3; i++){ for(j=0; j < 3; j++){ scanf("%d", & ze[j]); } } for(k=0; k < 3; k++){ printf("\n |"); for(l=0; l<3; l++){ printf("%d", & ze[k][l]); printf("|"); } } return 0; printf("\n"); } o que ta sendo imprimido: 1 //valores que inseri 2 //valores que inseri 3 //valores que inseri 4 //valores que inseri 5 //valores que inseri 6 //valores que inseri 7 //valores que inseri 8 //valores que inseri 9 //valores que inseri |4223040|4223044|4223048| //valores que saem |4223052|4223056|4223060| //valores que saem |4223064|4223068|4223072| //valores que saem -------------------------------- Process exited after 5.882 seconds with return value 0 Pressione qualquer tecla para continuar. . .
  9. int x (int n, int m) { if((n==m)||(m==0)) { return 1; } else { return x(n-1,m) + x(n-1 ,m-1); } } No caso, no primeiro momento vai entrar no if e vai verificar se n == m, no caso os dois são zeros, Então eles serão iguais, então entra na condição do if, que é o return 1. Feito isso, eu irei voltar no if novamente e verificar se n == m? não estou entendendo isso, alguém poderia me auxiliar?
  10. Boa tarde! Gostaria de uma ajuda em um exercício que estou fazendo. Vou disponibilizar o exercício, e o código que já fiz. Preciso de ajuda pois o exercício precisa ser entregue ainda hoje 31/05/19 e já tentei de tudo quanto é forma resolver. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <tchar.h> #include <locale.h> //Constante que define o tamanho máximo da estrutura de dados #define tamanho 3 typedef struct tipo_proc{ char nome[10]; int PID ; }tipo_proc; tipo_proc proc; //Declaração do tipo_pilha: estrutura de dados typedef struct tipo_pilha { tipo_proc dados[tamanho]; int ini; int topo; }tipo_pilha; //Criando uma variável tipo_pilha tipo_pilha pilha; //Função que empilha um novo elemento no topo void empilha(tipo_proc elemento) { //Verificando se existe alguma posição disponível para uma inserção if(pilha.topo == tamanho) { //Se a pilha estiver cheia, não é possível empilhar printf("Pilha cheia.\n"); system("pause"); } else { //Se a pilha não estiver cheia: // Adicione o novo elemento no topo // Incremente o topo pilha.dados[pilha.topo] = elemento; pilha.topo++; proc.PID++; } } /* Função que desempilha e retorna o elemento do topo */ tipo_proc desempilha(){ //Variável que guarda um "backup" do elemento desempilhado tipo_proc elemento; int i; //Verificando se existe algum elemento disponível para uma remoção if(pilha.topo == 0) { //Se a pilha estiver vazia, não será possível desempilhar printf("A Pilha está vazia.\n"); system("pause"); } else { //Decrementa-se o "topo". //Se a pilha não estiver vazia // Guarda um backup do elemento a ser removido; //'Arrata os elementos do "topo em direção ao "início" //Nesse passo, o elemento que estava no "início" da fila será sobrescrito for(i=0; i<tamanho; i++) pilha.dados = pilha.dados[i+1]; pilha.topo--; elemento = pilha.dados [pilha.topo]; //Retorne o elemento que estava no "topo" return elemento ; } } int main() { _tsetlocale(LC_ALL,_T("portuguese")); int i; int opcao=0; tipo_proc processo; tipo_proc backup; pilha.topo=0; pilha.ini=0; processo.PID =1 ; do{ printf("Opcoes:\n"); printf(" 1 - Inserir um elemento novo na pilha\n"); printf(" 2 - Remover um elemento da pilha\n"); printf(" 3 - Esvaziar a pilha\n"); printf(" 0 - Encerrar o programa\n"); printf(" Entre com a sua opcao: "); scanf("%d", &opcao); /*Le a opcao do usuario*/ switch (opcao) { //Inserir um elemento na pilha case 1: for(i=0;i<=3;i++) { printf("\nPID: %d - Nome: %s",pilha.dados [pilha.topo].PID,pilha.dados [pilha.topo].nome); scanf (" %s", &processo.nome); empilha(processo); } /*fflush(stdin);*/ break; case 2: printf("\nRemover um elemento da pilha:\n"); printf("PID: %d - Nome: %s\n", backup.PID, backup.nome); backup = desempilha(); fflush(stdin); break; case 3: printf("\n Esvaziar a pilha\n"); fflush(stdin); break; } }while(opcao!=0); }
  11. Bom dia a todos. Quando executo o código abaixo só imprime o valor armazenado no primeiro nó. A função insere o nó no início da lista. Estou usando Xcode em um macbook Air. Alguém sabe qual o bug? #include <stdio.h> #include <stdlib.h> // definição do tipo Lista. struct Lista{ int valor; struct Lista * proximo; }; // função insere_iniciio(). struct Lista* insere_inicio(struct Lista* n, int valor){ // declaração de variáveis. struct Lista* novo; if (n == NULL) { // se a lista estiver vazia. n = (struct Lista*)malloc(sizeof(struct Lista)); n->valor = valor; n->proximo = NULL; // por ser o primeiro nó não deve apontar. return n; }else{ // se a lista não estiver vazia. novo = (struct Lista*)malloc(sizeof(struct Lista)); novo->valor = valor; novo->proximo = n; return novo; } } int main(){ // declaração de variáveis. int valor; struct Lista* inicio; struct Lista* novo; struct Lista* temp; // aloca memória para a lista. inicio = (struct Lista*)malloc(sizeof(struct Lista)); // inicializa a estrutura. inicio->valor = 20; inicio->proximo = NULL; // limpa o console. system("clear"); printf("Informe o valor para armazenar na lista: "); scanf("%d", &valor); // chamada para a função insere_inicio(). novo = insere_inicio(inicio, valor); temp = novo; while (temp->proximo != NULL) { printf("Valor armazenado: %d\n", temp->valor); temp = temp->proximo; } return 0; }
  12. 1) Escrever uma função em C que: receba dois strings como parâmetro, bem como um valor inteiro representando uma posição; insira o segundo string no primeiro, na posição indicada pelo valor. No programa principal leia os dois strings, o valor da posição, passe para a função descrita acima e escreva o resultado na tela. 2) Desenvolva uma função em C, que recebe como parâmetros um inteiro n e duas matrizes quadradas reais X e Y de ordem n, sendo a dimensão n lida do teclado. Esta função calcula soma das matrizes X e Y . Escreva no módulo principal, a matriz gerada na função. 3) Escreva um programa que solicite ao usuário o número de notas a serem digitadas, crie uma matriz, com a dimensão especificada, para armazenar as entradas, solicite as notas e chame um função que retorne a média aritmética das notas. Após imprimir a média, o programa libera a memória alocada para a matriz . 4) Escreva uma função que inverta a ordem dos caracteres de uma cadeia de caracteres que ela recebe como argumento. Use ponteiro. Exemplo: ’Saudações’ resulta ’seõçaduaS’
  13. não converte o codigo na hora de ir de binario para hexa ou etc #include <stdio.h> #include <math.h> #include <stdlib.h> #define SIZE 255 #define ALG 17 int number,opcao; // Esta função converte um número decimal para a base 2, 8 ou 16. // Recebe como parâmetro um número decimal (num_dec), e a base (base) cujo número será convertido. void decToBase(int num_dec, int base) { char resto[ALG] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}, num_conv; int indx = 0; // Este loop realiza as operações de divisão. Os restos são guardados no vetor 'num_conv' while(num_dec > 0) { num_conv[indx] = resto[num_dec % base]; num_dec /= base; indx++; } // Exclui o caractere especial '\0' do final da string indx -= 1; // Utilizado para identificar a saída do programa switch(base) { case 2 : printf("BINÁŔIO: "); break; case 8 : printf("OCTAL: "); break; case 16 : printf("HEXADECIMAL: "); break; } // Inverte a string contida no vetor num_conv for(indx; indx >= 0; indx--) printf("%c", num_conv[indx]); printf("\n"); switch(opcao) { int num_salva; case 2: if(base=2) { for(indx; indx >= 0; indx--) { number+=num_conv[indx]; } } break; case 3: if(base=8) { for(indx; indx >= 0; indx--) { number+=num_conv[indx]; } } break; case 4: if(base=16) { for(indx; indx >= 0; indx--) { number+=num_conv[indx]; } } break; } } // Esta função permite converter um número na base 2, 8 ou 16 para a base decimal. // Recebe como parâmetro uma string (representação do número), e um número inteiro que // determina em qual base está o número do primeiro parâmetro. void baseToDec(char* num_base, int base) { int indx = 0, exp = 0, cont = 0, dec = 0, num = 0; // Este loop determina o tamanho da string while(num_base[cont] != '\0') { cont++; } // Neste loop, a string é percorrida de trás para frente. Cada caractere é convertido // em um número inteiro, multiplicado pela base elevada ao expoente (0..Comprimento da string) // e somado ao valor da variável 'dec', que recebe as somas sucessivas. for(exp, indx=(cont-1); exp < cont; exp++, indx--) { if(base == 16) { switch(num_base[indx]) { case 'A' : case 'a' : num = 10; break; case 'B' : case 'b' : num = 11; break; case 'C' : case 'c' : num = 12; break; case 'D' : case 'd' : num = 13; break; case 'E' : case 'e' : num = 14; break; case 'F' : case 'f' : num = 15; break; default : num = (int)num_base[indx] - (int)'0'; } } else num = (int)num_base[indx] - (int)'0'; // Aqui avalia se o usuário digitou um número válido ou não! if(num > (base-1) || num < 0) { printf("Você informou um número inválido!\n"); exit(0); } dec += num * pow(base, exp); } // O número convertido para decimal é exibido printf("DECIMAL: %d\n", dec); } // Função que imprime o menu da calculadora void menu(void) { printf("\nBEM-VINDO AO CONVERSOR DE BASES NUMÉRICAS\n"); printf("QUAL OPERAÇÃO DESEJA REALIZAR? \n"); printf("[ 1 ] DECIMAL -> BINARIO, OCTAL e HEXADECIMAL\n"); printf("[ 2 ] BINARIO -> DECIMAL, OCTAL e HEXADECIMAL\n"); printf("[ 3 ] OCTAL -> DECIMAL, BINARIO e HEXADECIMAL\n"); printf("[ 4 ] HEXADECIMAL -> DECIMAL, BINARIO, OCTAL\n"); printf("[ 0 ] SAIR\n"); } // Função que chama as funções correspondentes à opção escolhida void process_calc(int opt) { char str; switch(opt) { case 0 : printf("CALCULADORA ENCERRADA!\n"); exit(0); case 1 : printf("DECIMAL: "); scanf("%d", &number); decToBase(number, 2); decToBase(number, 8); decToBase(number, 16); break; case 2 : printf("BINÁRIO: "); scanf("%s", str); baseToDec(str, 2); decToBase(number, 8); decToBase(number, 16); break; case 3 : printf("OCTAL = "); scanf("%s", str,3); baseToDec(str, 8); decToBase(number, 2); decToBase(number, 16); break; case 4 : printf("HEXADECIMAL = "); scanf("%s", str); baseToDec(str, 16); decToBase(number, 2); decToBase(number, 8); break; default : printf("OPÇÃO NÃO PERMITIDA!\nTENTE NOVAMENTE\n"); break; } } int main(void) { menu(); printf("QUAL OPERAÇÃO DESEJA REALIZAR? "); scanf("%d", &opcao); process_calc(opcao); return 0; }
  14. Exercicio Caixa eletrônico com Notas. Ola, estou tentando fazer um ex. aqui de um caixa eletrônico, onde precisa ser feito o saque apenas com as determinadas notas: 2, 5, 10, 20, 50 e 100 reais. Consegui fazer assim, deu certo até o saque de valor 13, dai pra frente ele entrega os valores impares em notas de 2 e 5 rsrs #include <stdio.h> #include <stdlib.h> int main() { int n100=0,n50=0,n20=0,n10=0,nota5=0,nota2=0; float valor=0; int valor2=0; int op; printf("-> Quanto deseja sacar? R$"); scanf("%f",&valor); valor2=(int) valor; if(valor2%2==0){ while(valor>=100){ valor=valor-100; n100=n100+1; } while(valor>=50){ valor=valor-50; n50=n50+1; } while(valor>=20){ valor=valor-20; n20=n20+1; } while(valor>=10){ valor=valor-10; n10=n10+1; } while(valor>=2){ valor=valor-2; nota2=nota2+1; } } if(valor2%2==1){ if(nota5<=1){ while(valor>=5){ valor=valor-5; nota5=nota5+1; if(nota5>=1){ while(valor>=2){ valor=valor-2; nota2=nota2+1; } break; } } } while(valor>=2){ valor=valor-2; nota2=nota2+1; } } printf("SAQUE:\n"); printf("%d nota(s) de R$ 100.00\n",n100); printf("%d nota(s) de R$ 50.00\n",n50); printf("%d nota(s) de R$ 20.00\n",n20); printf("%d nota(s) de R$ 10.00\n",n10); printf("%d nota(s) de R$ 5.00\n",nota5); printf("%d nota(s) de R$ 2.00\n",nota2); return 0; }
  15. Se poderem dar uma olhada no código abaixo e me dizer o que está causando o erro, eu agradeço demais ! Aceitos dicas/sugestões para melhorar o código também ! Obs: Estou tentando fazer um jogo da velha. (Ignorem as bibliotecas inúteis .-. ) #include <iostream> #include <stdio.h> //Para função gets #include <stdlib.h> //Para função malloc #include <math.h> #include <iomanip> //JOGO DA VELHA using namespace std; bool x=false,o=false; int jogadas=0; bool verificaX(char *vetor); bool verificaO(char *vetor); int main(){ char casas[3][3]={' ',' ',' ',' ',' ',' ',' ',' ',' '}; int l=0,c=0; while(jogadas<9){ cout << "\t\t" << casas[0][0] << " | " << casas[0][1] << " | " << casas[0][2] << "\n"; cout << "\t\t_________\n"; cout << "\t\t" << casas[1][0] << " | " << casas[1][1] << " | " << casas[1][2] << "\n"; cout << "\t\t_________\n"; cout << "\t\t" << casas[2][0] << " | " << casas[2][1] << " | " << casas[2][2] << "\n\n\n"; cout << "Digite uma linha: "; cin >> l; cout << "Digite uma coluna: "; cin >> c; while(l<=0 || c <=0 || l>3 || c>3){ system("cls"); cout << "Linha ou Coluna não existe!"; cout << "Digite uma linha: "; cin >> l; cout << "Digite uma coluna: "; cin >> c; } system("cls"); if(jogadas%2==0){ casas[--l][--c]='X'; }else{ casas[--l][--c]='O'; } jogadas++; verificaX(&casas); verificaO(&casas); } if(verificaX){ cout << "Jogador X ganhou!"; }else if(verificaO){ cout << "Jogador O ganhou!"; }else{ cout << "Empate!"; } return(0); } bool verificaX(char *vetor){ int l,c; for(l=0;l<3;l++){ if(*vetor[l][0] && *vetor[l][1] && *vetor[l][2] == 'X'){ jogadas=10; return x=true; }else if(*vetor[0][c] && *vetor[1][c] && *vetor[2][c] == 'X'){ jogadas=10; return x=true; } c++; } } bool verificaO(char *vetor){ int l,c; for(l=0;l<3;l++){ if(*vetor[l][0] && *vetor[l][1] && *vetor[l][2] == 'X'){ jogadas=10; return o=true; }else if(*vetor[0][c] && *vetor[1][c] && *vetor[2][c] == 'X'){ jogadas=10; return o=true; } c++; } }
  16. Se poderem dar uma olhada no código abaixo e me dizer o que está causando o erro, eu agradeço demais ! Obs: Estou tentando fazer um jogo da velha. (Ignorem as bibliotecas inúteis .-. ) #include <iostream> #include <stdio.h> //Para função gets #include <stdlib.h> //Para função malloc #include <math.h> #include <iomanip> //JOGO DA VELHA using namespace std; bool x=false,o=false; int jogadas=0; bool verificaX(char *vetor); bool verificaO(char *vetor); int main(){ char casas[3][3]={' ',' ',' ',' ',' ',' ',' ',' ',' '}; int l=0,c=0; while(jogadas<9){ cout << "\t\t" << casas[0][0] << " | " << casas[0][1] << " | " << casas[0][2] << "\n"; cout << "\t\t_________\n"; cout << "\t\t" << casas[1][0] << " | " << casas[1][1] << " | " << casas[1][2] << "\n"; cout << "\t\t_________\n"; cout << "\t\t" << casas[2][0] << " | " << casas[2][1] << " | " << casas[2][2] << "\n\n\n"; cout << "Digite uma linha: "; cin >> l; cout << "Digite uma coluna: "; cin >> c; while(l<=0 || c <=0 || l>3 || c>3){ system("cls"); cout << "Linha ou Coluna não existe!"; cout << "Digite uma linha: "; cin >> l; cout << "Digite uma coluna: "; cin >> c; } system("cls"); if(jogadas%2==0){ casas[--l][--c]='X'; }else{ casas[--l][--c]='O'; } jogadas++; verificaX(&casas); verificaO(&casas); } if(verificaX){ cout << "Jogador X ganhou!"; }else if(verificaO){ cout << "Jogador O ganhou!"; }else{ cout << "Empate!"; } return(0); } bool verificaX(char *vetor){ int l,c; for(l=0;l<3;l++){ if(*vetor[l][0] && *vetor[l][1] && *vetor[l][2] == 'X'){ jogadas=10; return x=true; }else if(*vetor[0][c] && *vetor[1][c] && *vetor[2][c] == 'X'){ jogadas=10; return x=true; } c++; } } bool verificaO(char *vetor){ int l,c; for(l=0;l<3;l++){ if(*vetor[l][0] && *vetor[l][1] && *vetor[l][2] == 'X'){ jogadas=10; return o=true; }else if(*vetor[0][c] && *vetor[1][c] && *vetor[2][c] == 'X'){ jogadas=10; return o=true; } c++; } }
  17. Boa tarde! Esse é o meu primeiro post aqui, então me desculpem por qualquer erro. Eu estou tentando fazer um programa em C para cadastro de alunos. Basicamente ele precisa cadastrar quantos alunos o usuário quiser (máximo 50) e cada aluno possui uma chave (identificação) e três notas (n1, n2, n3). Até o cadastro, parece que deu tudo certo, mas ocorre um erro estranho quando tento apresentar os alunos. O código é o seguinte: #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <malloc.h> #define MAX 50 //Estrutura de Alunos typedef struct{ int chave; int n1; int n2; int n3; }ALUNO; //Lista dinâmica typedef struct{ ALUNO A[MAX]; int qtdAlunos; }LISTA; //Função para iniciar lista void inicia_sistema(LISTA* li){ li->qtdAlunos = 0; printf("\n\nSistema Iniciado!\nVocê tem %d alunos cadastrados.\n--------------------------------------\n\n", li->qtdAlunos); } //Função para cadastrar alunos int cadastra_aluno(LISTA* li, ALUNO al){ int i = li->qtdAlunos; if(li->qtdAlunos == 0){ li->A[0] = al; return 1; }else{ i++; li->A[i] = al; return 1; } return 0; } //Função para listar alunos void lista_aluno(LISTA* li){ int i; for (i=0; i < li->qtdAlunos; i++){ printf("Aluno %d\n", i); printf("Nota 1: %i\n", li->A[i].n1); printf("Nota 2: %i\n", li->A[i].n2); printf("Nota 3: %i\n\n\n", li->A[i].n3); } } int main(){ setlocale(LC_ALL, "Portuguese"); LISTA* li = (LISTA*) malloc(sizeof(LISTA)); ALUNO al[MAX]; int op, cont, result; do{ printf("Pressione para escolher:\n"); printf("1 - Iniciar Sistema\n"); printf("2 - Cadastrar Aluno\n"); printf("3 - Listar Alunos\n"); printf("0 - Sair\n"); scanf("%d", &op); switch(op){ case 1: inicia_sistema(li); break; case 2: system("cls"); printf("Cadastro de Alunos\n\n--------------------------------------\n\n"); printf("Você tem %d alunos cadastrados.\n", li->qtdAlunos); printf("Nota 1: "); scanf("%d", &al[li->qtdAlunos].n1); printf("Nota 2: "); scanf("%d", &al[li->qtdAlunos].n2); printf("Nota 3: "); scanf("%d", &al[li->qtdAlunos].n3); al[li->qtdAlunos].chave = li->qtdAlunos; result = cadastra_aluno(li, al[li->qtdAlunos]); li->qtdAlunos++; if(result > 0){ printf("Aluno cadastrado!\n"); printf("Você tem %d alunos cadastrados.\n\n", li->qtdAlunos); }else{ printf("Aluno não cadastrado!\n"); printf("Você tem %d alunos cadastrados.\n\n", li->qtdAlunos); } break; case 3: system("cls"); printf("Listar Alunos\n\n--------------------------------------\n\n"); lista_aluno(li); break; } }while(op!=0); } A saída, para um caso de 3 alunos cadastrados, está em anexo.
  18. Olá, estou com um exercício da faculdade que não consegui resolver, é um exercício onde preciso utilizar ponteiro para ponteiro em uma struct mas estou muito perdido na sintaxe. o exercício é o seguinte: Faça uma struct com dois campos, uma string para nome e um int para armazenar um número inteiro. Na main peça para o usuário digitar o tamanho do array da struct. Crie uma função para alocar dinamicamente esse array de struct e ler os dados digitados pelo usuário. Faça uma função que verifica os números pares digitados pelo usuário na struct e se o número for par dentro do if se chama outra função para manipular esse número par passando toda a struct, essa função deve receber a struct mas manipular apenas o número par dela e dividi-lo por 2 alterando a struct original. No final o programa deve imprimir na main o array dos números. Eu consegui fazer alocando na própria main, mas dessa forma com uma função separada não consegui. Vou deixar meu código, que deve ter vários erros mas serve pra ilustrar bem o que o exercício pede. #include <stdio.h> #include <stdlib.h> #include <locale.h> struct dados{ char nome[5]; int num; }; typedef struct dados dado; void manipula_um_par(dado **q){ **q.num=**q.num/2; } void manipula_pares(dado **q,int *x){ int i; for(i=0;i<*x;i++){ if(*(*q[i]).num%2==0){ manipula_um_par(&q[i]); } } } void define_structs(int *n, dado *q){ dado *p; int i; p = (dado *) malloc(*n*sizeof(dado)); printf("\n"); for(i=0;i<*n;i++){ printf("Digite o %dº nome: ",i+1); gets(p[i].nome); setbuf(stdin,NULL); printf("Digite o %dº número: ",i+1); scanf("%d", &p[i].num); setbuf(stdin,NULL); printf("\n"); } q=&p; } int main(){ setlocale(LC_ALL, "Portuguese_Brazil"); int n, i; dado **q; printf("Digite o tamanho do vetor de struct: "); scanf("%d",&n); setbuf(stdin,NULL); q = (dado *) malloc(n*sizeof(dado)); define_structs(&n,q); manipula_pares(q,&n); for(i=0;i<n;i++){ printf("%d\n", **q[i].num); } printf("\n"); return 0; }
  19. Estou tentando finalizar um processo, mas o processo-pai acaba relançando ele. Quero que o processo-pai pare de dar fork neste processo. O problema é que o processo pai é o init (então não posso matar ele, e é um processo NÃO É UM SERVIÇO que eu quero matar): init.d fork() quero saber se alguma dessas ideias é viável: fazer um LD_PRELOAD no meu Android para alterar a chamada fork de forma que eu consiga rastrear o processo (se é que existe e não é apenas o ActivityManager ou o systemserver) que está fazendo o init forkar de novo. Algum programa que bloqueie os sinais de parentesco entre o init e o processo que eu quero matar (SIGCHLD) De alguma forma editar o código do programa do processo que eu quero matar (é um binário do sistema) É isso. Qualquer ajuda é bem-vinda :)
  20. Olá, bom dia! Tenho que fazer o seguinte algoritmo: "Construa um programa que receba um número natural positivo n (60 >= n >=1) e a seguir uma lista de n valores inteiros positivos. O programa determina e imprime o tamanho da maior subsequência crescente. Entenda-se por tamanho da subsequência o número de elementos (naturais) que ela apresenta. Observação: Sejam a, b e c valores inteiros. Considere a sequência de valores {a, b, c}, dizemos que uma subsequência de tamanho 2 {a, b} é crescente se a < b ou a = b; assim, se a<=b e b<=c, a subsequência {a, b, c} é crescente e tem tamanho 3. Além disso, o tamanho da menor subsequência de qualquer sequência não vazia é 1 (qualquer valor da sequência é considerado uma subsequência). Exemplos: 1. Entrada: 1 9 Saída: 1 2. Entrada: 3 3 2 1 Saída: 1 3. Entrada: 3 1 1 1 Saída: 3 4. Entrada: 6 1 2 3 4 4 3 Saída: 5 " Eu criei o seguinte algoritmo: #include <stdio.h> int main (){ char vet[100]; int i, cont; scanf("%[^\n]", vet); for (i=0; vet!='\0'; i++) { int cod=(int)vet; if (cod >=48 && cod <=57) { if (cod >= cod-1) { cont++; } } } printf("%d", cont); return 0; } Não sei onde estou errando, não sei se a minha lógica está correta, poderiam me orientar?
  21. Me ajudem eu fiz esse algoritmo mas n sei se está correto . Escreva um algoritmo em linguagem C com as seguintes instruções: 1. Declare três variáveis (inteiro, real e char); 2. Declare três ponteiros; 3. Associe as variáveis aos ponteiros; 4. Modifique os valores de cada variável indiretamente usando os ponteiros associados. Para armazenar os valores nas variáveis, armazene na variável char a primeira letra do seu nome, na variável inteira os dois últimos dígitos do seu RU e na variável real os 4 últimos dígitos do seu RU, sendo os 2 últimos os valores com virgula; 5. Imprima na tela os valores das variáveis antes e após a modificação. #include <stdio.h> int main(void){ int x; x= 04; float y; y = 49.04; char z; z = 'm'; int *ponteiro1; ponteiro1 = &x; float *ponteiro2; ponteiro2 = &y; char *ponteiro3; ponteiro3 = &z; printf("\nValor antes: %i\n", *ponteiro1); printf("Valor depois: %i\n\n", &x); printf("Valor antes: %f\n", *ponteiro2); printf("Valor depois: %f\n\n", ponteiro2); printf("Valor antes: %c\n", *ponteiro3); printf("Valor depois: %c", *ponteiro3); }
  22. Programa que calcula o perímetro de triângulo. Recebe como dados de entrada as coordenadas dos vértices do triângulo e retorna o perímetro na unidade de medida escolhida. #include <stdio.h> #include <stdlib.h> #include <math.h> //definição do tipo Ponto. struct Ponto{ float x; float y; }; typedef struct Ponto PONTO; //definição da estrutura Triangulo com vértices do tipo PONTO. struct Triangulo{ //Vértices do triângulo. PONTO p[3]; }; typedef struct Triangulo TRIANGULO; //definição da função gerarTriangulo, que retorna uma estrutura do tipo //TRIANGULO. TRIANGULO gerarTriangulo(){ //variáveis. TRIANGULO tr; int contador; //Limpa a tela. system("cls"); //Entrada das coordenadas dos vértices do triângulo. for(contador = 0; contador < 3; contador++){ printf("Obtendo p%i:\n", contador + 1); printf("Abscissa: "); scanf("%f%*c", &tr.p[contador].x); printf("Ordenada: "); scanf("%f%*c", &tr.p[contador].y); } return tr; } float perimetro(TRIANGULO t){ //declaração de variáveis. float d1, d2, d3; //Cálculo do tamanho dos lados do triângulo. d1 = sqrt(pow(t.p[0].x - t.p[1].x, 2) + pow(t.p[0].y - t.p[1].y, 2)); d2 = sqrt(pow(t.p[0].x - t.p[2].x, 2) + pow(t.p[0].y - t.p[2].y, 2)); d3 = sqrt(pow(t.p[1].x - t.p[2].x, 2) + pow(t.p[1].y - t.p[2].y, 2)); //Retorno da soma dos lados que é o perímetro do triângulo. return d1 + d2 + d3; } int main(){ //Declaração de variáveis. char unidade_medida; system("cls"); //Solicita um tipo de unidade de medida até que o usuário escolha uma das opções //válidas. do{ printf("Escolha a unidade de medida: \n"); printf("c - centimetros, m - metros: "); scanf("%c%*c", &unidade_medida); }while(unidade_medida != 'c' && unidade_medida != 'm'); //Exibe o resultado de acordo com a unidade de medida escolhida. //Considera até três casas decimais. switch(unidade_medida){ case 'c': printf("O perimetro do triangulo e: %.3f cm.\n", perimetro(gerarTriangulo())); break; case 'm': printf("O perimetro do triangulo e: %.3f m.\n", perimetro(gerarTriangulo())); } return 0; }
  23. Gente, eu to passando muita dificuldade pra entender strings em C, preciso fazer um código q eu dou entrada em 16 valores (q são tanto números, quanto letras), cada valor lido vai ter um resultado diferente, porém quando o próximo valor for zero ele tem q finalizar a execução e apenas executar os resultados respectivos dos valores já lidos. Na lógica que eu montei eu criei uma função pra tentar fazer isso sem ter q colocar uma sequencia de mil e um "if" e "else" porque são mais ou menos 20 valores diferentes que podem ser combinados com vários outros valores e isso é código dms pra digitar, por isso tentei fazer usando só uma função em q eu chamasse o código, passasse os parametros e via se daria certo, porém o código n funcionou, refiz a lógica já umas 6 vezes, em nenhum momento deu certo e a única vez q de forma ilusória pareceu dar mais certo foi essa: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> char* leitor(char vl1[], char vl2[], char c1[], char resultado[]) { if(strcmp(vl1, c1)) //comparação entre duas strings, pra ver se o valor 1 recebido comparado ao valor q é respectivo ao resultado é esse, se não fosse ele simplesmente daria retorno nulo { if(strcmp(vl2, "0")) //comparação entre o próximo valor e o valor 0, se for igual ele executa a ação do valor 1, se { return resultado; } else { return 0; } } else { return 0; } } int main() { setlocale(LC_ALL, "Portuguese"); int c=0; char v[16][200]; printf("Digite os 16 valores: \n"); while(c<16) { c = ++c; printf("Bloco %i: ", c); gets(v[c]); } printf("Ações: %s", leitor(v[1], v[2], "1", "feliz")); return 0; } O código ta dando sempre como resultado nulo, e se por algum motivo eu troco o valor do parametro c1[] pra "10" e o zero sendo comparado com o vl2 pra "00" o resultado sempre é "feliz" independente da lógica ser certa ou n, me socorram, acredito q o problema seja com as strings, a forma q declarei elas ou qualquer coisa assim, agradeço desde já s2
  24. Tenho esse algoritmo pra fazer:Codifique, compile e execute um programa em C que declare na função principal uma estruturapara o cadastro de alunos de uma academia. a) Para cada aluno armazenar: nome, sobrenome (apenas um), ano de nascimento e um vetor de 6posições indicando quais dias da semana o aluno frequenta a academia. Lembrando que aacademia funciona de segunda a sábado;b) Ao iniciar o programa, o usuário deverá informar o número de alunos que serão armazenados;c) O programa deverá alocar dinamicamente a quantidade necessária de memória para armazenaros registros dos alunos;d) O programa deverá pedir ao usuário que entre com as informações dos alunos;e) Ao final, o programa deve exibir na tela os dados armazenados e liberar a memória alocada. Não esqueça de usar funções para estruturar o seu código.Consegui fazê-lo rodar mas sem o uso de ponteiro e creio que estou confundindo o conceito de ponteiro e alocação dinâmica. Então gostaria que avaliassem meu código e dissessem o que estou fazendo de errado.Código: #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> #include <math.h> int main(){ setlocale(LC_ALL, "Portuguese_Brazil"); struct cadastro{ char nome[20]; char sobrenome[30]; char ano[10]; int dias[6]; }; int n,i,j,*p; printf("Digite quantos alunos cadastrar: "); scanf("%d",&n); setbuf(stdin,NULL); printf("\n"); p=(int *) malloc(n*sizeof(int)); struct cadastro c[*p]; for(i=0;i<n;i++){ printf("%dº aluno para cadastrar:\n\n",i+1); printf("Nome: "); fgets(c[p[i]].nome,20,stdin); setbuf(stdin,NULL); printf("Sobrenome (apenas um): "); gets(c[p[i]].sobrenome); setbuf(stdin,NULL); printf("Ano de nascimento: "); gets(c[p[i]].ano); setbuf(stdin,NULL); printf("\nDias na semana que frequenta a academia (0 para não; 1 para sim):\n"); setbuf(stdin,NULL); for(j=0;j<6;j++){ printf("Dia %d: ",j+1); scanf("%d",&c[p[i]].dias[j]); setbuf(stdin,NULL); } printf("\n\n"); } printf("\n\nDados cadastrados dos alunos: \n\n"); for(i=0;i<n;i++){ printf("%dº aluno: \n",i+1); printf("Nome: %s",c[p[i]].nome); printf("Sobrenome: %s\n",c[p[i]].sobrenome); printf("Ano de nascimento: %s\n",c[p[i]].ano); printf("O aluno foi na academia nos seguintes dias:\n"); if(c[p[i]].dias[0]==1) printf("Segunda, "); if(c[p[i]].dias[1]==1) printf("Terça, "); if(c[p[i]].dias[2]==1) printf("Quarta, "); if(c[p[i]].dias[3]==1) printf("Quinta, "); if(c[p[i]].dias[4]==1) printf("Sexta, "); if(c[p[i]].dias[5]==1) printf("Sábado"); printf("\n\n\n"); } free(p); return 0; }
  25. Boa tarde, galera! Fiz um pequeno programa de cadastro de pessoas e percebi que quando exibo as pessoas cadastradas o último registro gravado está duplicado. Estou usando win10 e o compilador é o minGW. segue o código: #include <stdio.h> #include <stdlib.h> #include <string.h> struct Pessoa{ char nome[30]; int idade; }; void pausa(){ printf("pressione qualquer tecla para voltar ao menu principal\n"); scanf("%*c"); } void limpar_buffer(){ scanf("%*[^\n]"); scanf("%*c"); } void cadastrar(){ FILE* fp; struct Pessoa p; char escolha = 's'; do{ system("cls"); printf("Rotina de cadastro\n\n\n"); printf("Nome: "); fgets(p.nome, 30, stdin); printf("Idade: "); scanf("%d%*c", &p.idade); fp = fopen("cadastro.dat", "ab"); fwrite(&p, sizeof(p), 1, fp); fclose(fp); system("cls"); printf("Cadastro realizado com sucesso!\n"); printf("\n\n\nCadastrar outro?: "); escolha = getchar(); limpar_buffer(); }while(escolha != 'n' && escolha != 'N'); } void exibir(){ FILE* fp; struct Pessoa p; int total = 0; system("cls"); printf("Relacao de cadastrados\n\n\n"); fp = fopen("cadastro.dat", "rb"); while(!feof(fp)){ fread(&p, sizeof(p), 1, fp); total++; printf("Nome: %s\n", p.nome); printf("Idade: %d\n", p.idade); printf("-----------------------------------------\n"); } fclose(fp); printf("Numero de cadastrados: %d\n", total); pausa(); } int menu(){ int m; system("cls"); printf("Menu principal\n\n\n"); printf("[1] - Cadastrar\n"); printf("[2] - Relacao cadastrados\n"); printf("[3] - Sair\n"); printf("\n\n\n?: "); scanf("%d%*c", &m); return m; } int main(){ //declaração de variáveis. int escolha = 0; do{ escolha = menu(); switch(escolha){ case 1:cadastrar(); break; case 2:exibir(); } }while(escolha != 3); return 0; }