-
Posts
655 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que 1freakday postou
-
Cuida nessa situação, onde você chama uma função que não esta usando argumentos na chamada:
-
Segmentation fault (core dumped), funcao atexit
1freakday respondeu ao tópico de reuter_rjort em C/C#/C++
#include <stdio.h> #include <stdlib.h> //numero maximo de callbacks permitidos #define MAX_CALLBACKS 10//0 a 9 //matriz de ponteiros com os callbacks static void *callbacks[MAX_CALLBACKS]; static int callbacks_pos = 0; //implementacao de my_atexit () static int my_atexit ( void (*func) (void)) { //caso haja posicao disponivel na matriz, guarda o ponteiro if ( callbacks_pos < MAX_CALLBACKS ) { //callbacks[callbacks_pos++] = func; callbacks[callbacks_pos] = (void *)func;//<---- mudei callbacks_pos++; return 0; } //caso ja existam funcoes agendadas, retorna um erro return -1; } static void my_exit ( int status ) { void ( *func )(void); callbacks_pos--;//Coloca na posicao 9 //executa todas as funcoes agendadas de tras para frente while ( callbacks_pos != -1 ){ if ( (func = (void (*) (void))callbacks[callbacks_pos]) != NULL )//<---- mudei func (); callbacks_pos--; } exit(status); } static void func0 (void) { fprintf ( stdout, "funcao 0... \n" ); } static void func1 (void) { fprintf ( stdout, "funcao 1... \n" ); } static void func2 (void) { fprintf ( stdout, "funcao 2... \n" ); } static void func3 (void) { fprintf ( stdout, "funcao 3... \n" ); } static void func4 (void) { fprintf ( stdout, "funcao 4... \n" ); } static void func5 (void) { fprintf ( stdout, "funcao 5... \n" ); } static void func6 (void) { fprintf ( stdout, "funcao 6... \n" ); } static void func7 (void) { fprintf ( stdout, "funcao 7... \n" ); } static void func8 (void) { fprintf ( stdout, "funcao 8... \n" ); } static void func9 (void) { fprintf ( stdout, "funcao 9... \n" ); } int main (void) { my_atexit (func0); my_atexit (func1); my_atexit (func2); my_atexit (func3); my_atexit (func4); my_atexit (func5); my_atexit (func6); my_atexit (func7); my_atexit (func8); my_atexit (func9); my_exit (0); //nunca sera executado! return 0; } Kkkk deve ser sono, ainda mais pra usar // huehuehue, enfim eu dei uma ajuda, espero que esteja de acordo com seu programa, boa sorte. -
Hello friend. //P.S: Comentar o código vai facilitar sua vida #include<stdio.h> #include<stdlib.h> #include<string.h> int Le_texto(char *v) { FILE *fp; if ((fp=fopen("texto.txt","r"))==NULL) { printf("Não foi possivel abrir arquivo!"); exit(1); } //Corrigindo sua linha fgets while(fgets(v,500, fp)!= NULL){ printf("%s", v); } fclose(fp); return 0; } //void Corrigir (char v) void Corrigir() { char s1[] = "Mas, Bentinho"; char s2[] = ","; char s3[] = " que e protonotario apostolico"; char s4[] = "?"; // char v[]; DECLARAÇÃO INCORRETA, E ESTA EM DESACORDO COM O PARAMETRO DA CHAMADA DA FUNÇÃO char v[500]; strcat(s1, s2); strcpy(v, s1); puts(v); strcat(s3, s4); strcpy(v, s3); puts(v); } void Grava_texto(char *v) { FILE *fp2; if ((fp2=fopen("textocerto.txt","w"))==NULL) { printf("Não foi possivel abrir arquivo!"); exit(1); } //As duas linhas a seguir serve apenas apra ler o conteudo do arquivo //fgets(v,500, fp2); //printf("%s", v); fprintf(fp2,"%s",v); fclose(fp2); //return 0; usando void como tipo de função } int main() { char vetor[500];//Memoria ja alocada Le_texto(vetor);//Envia vetor alocado acima return 0; }
-
Error: The language for grammar does not match the language of the speech recognizer Quer dizer que a linguagem do dicionario não esta sendo reconhecida pelo leitor de voz. Veja se as funções estão corretas, a seguir: sre.LoadGrammar(new Grammar(new GrammarBuilder(new Choices(comands)))); sre.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(rec); sre.RecognizeAsync(RecognizeMode.Multiple);
-
Como fazer um bot para web?
1freakday respondeu ao tópico de Joao Victor Fernandes Tesch em C/C#/C++
Você pode aprender um pouco sobre Socket, HTTP, GET e POST, mas dependendo do site, pode ser possível criar um bot para logar, e acessar certas funções, estude um pouco a estrutura do site. -
Creio que seja para alterar o local do printf, usando as coordenadas x e y. Segue o link da documentação:http://prizm.cemetech.net/index.php/PrintXY
-
Meu amigo, você ao menos traduziu as mensagens? Vamos ver, a seguinte mensagem: "It seems that this file has not been built yet. Do you want to build it now?" que vem com as opções "Yes" "No" e "Cancel" ... Traduzindo: Parece que este arquivo ainda não foi compilando ainda. Deseja compilar ele agora? - segundo das opções Sim, Não e Cancelar. Essa mensagem pode aparecer caso você não esteja usando um projeto no Codeblocks e sim apenas um arquivo, o que pode levar a esse mensagem, ou por que o codeblocks não está conseguindo criar o arquivo .exe, tente executar como administrador e use projetos. Agora a seguinte mensagem: "Process terminated with status 0 (0 minute(s), 0 second (s)) 0 erros, 0 warnings, 0 minutes, 0 seconds)" - Traduzindo: Processo terminado com status 0 (0 minuto(s), 0 segundo(s) 0 erros, 0 alertas, 0 minutos, 0 segundos)" Essa mensagem significa que o codeblocks executou e terminou o programa com status 0 (sem erro, pois você usa return 0;). E por fim: Process returned 0 (0x0) execution time 0.0002 s Press ENTER to continue Trad....: Processo retornou 0 (0x0) tempo de execução 0.0002 s Pressione ENTER para continuar Essa mensagem significa que o processo retornou 0, seu tempo ativo foi de 0.0002 segundos. Se você analisar todas mensagens, saberá que seu código não tem erros, porém ele está fechando muito rápido(0.0002 s), tente abrir o seu programa compilado no cmd aonde ele estiver, caso contrario tente criar outros códigos, para testar.
-
De fato C/C++ podem ser mais complicado, pois você terá que criar desde o servidor, recursos de entrada e saída de dados(threads ajudam muito), uso de packets(um padrão para receber os dados, binário, hexadecimal, ou o seu próprio tipo), ainda mais você precisa saber sobre big endian e little endian, e repetir o mesmo processo no cliente, limitando-o a apenas aos recursos de um cliente. Enfim você saberá mais afundo como funciona um sistema de sockets, e além de mais flexível quanto as linguagens, ele será 100% puro do seu conhecimento, e você não terá muitos limites dependendo do seu objetivo.
-
Cria um primeiro loop para preencher os pares em um vetor auxiliar, e depois cria outro loop para preencher os impares continuando no indice em que os pares pararam, exemplo: void ordena(int x[]) int y[];//Vetor auxiliar int ind = 0;//Indice no vetor auxiliar int c = 0;//Contador vetor recebido //Loop adicionar valores pares loop até todos valores do vetor serem lidos se x[c] for par y[ind] = x[c] ind++; fimse c++ fimloop c = 0; //Loop adicionar valores impares loop até todos valores do vetor serem lidos se x[c] NÃO for par y[ind] = x[c] ind++; fimse c++ fimloop //Agora é so passar os valores do vetor auxiliar ao vetor recebido //Ou retornar o vetor auxiliar - Trocar tipo de função
-
Imprimir a quantidade moedas em um troco de acordo com o valor?
1freakday respondeu ao tópico de Dauster Skywallker em C/C#/C++
Creio que o problema esteja na condição que finaliza o do...while, pois o troco, pelo que verifiquei, nao fica 0, portanto temos que verificar corretamente, exemplo #include <stdio.h> int main(){ float moedas[4] = {0.25, 0.10, 0.05, 0.01}, troco = 0.00; int c = 0, i = 0; printf("Troco:"); scanf("%f",&troco); do { while(troco < moedas[c]) c++; printf("\nTroco: %.2f-%.2f >> %.2f\n",troco,moedas[c],troco-moedas[c]); troco-=moedas[c]; i++; }while(troco > 0.001 && c < 4);//Ele nao fica 0.00 exato, por isso eu mudei a terceira casa, pois nao usamos ela para moedas, e c tem que ser < 4 printf("Count:%d\n",i); return 0; } Podemos colocar o c como 0 dentro do loop caso o troco ainda for maior que os valores do vetor moedas. -
Melhor linguagem para criar cadastro
1freakday respondeu ao tópico de Alfredo Braz em Programação - iniciantes
Aconselho a usar C, assim você vai ter mais facilidade com Java e muitas outras linguagens. -
Verificar se existe duplicação de valor na lista - c
1freakday respondeu ao tópico de Philipe de Souza em C/C#/C++
Para usar bool em c, pode ser usado incluindo: stdbool.h -
Verificar se existe duplicação de valor na lista - c
1freakday respondeu ao tópico de Philipe de Souza em C/C#/C++
Como você está usando C, não há o tipo bool por padrão, porém você pode criar com int, ou criar um tipo enum bool com os valores true e false. No segundo, se você está passando um vetor Node criado com índice [] e não ponteiro *, você tem que passar o endereço para o ponteiro do parâmetro (na chamada do função). Exemplo: int main(){ struct Node no[1]; CPF_lookup(&no[0]); } -
Verificar se existe duplicação de valor na lista - c
1freakday respondeu ao tópico de Philipe de Souza em C/C#/C++
Corrigindo: bool CPF_lookup(Node *n, const char *par) {//Mudei para Node * pois, se você enviar um vetor de Node, você teria que determinar qual sera acessado no loop Node *it = n; while(it=!NULL){ if((strcmp(it->CPF,par)==0)){ //Abaixo é imprudente, pois você teria que verificar tudo de novo, melhor //retornar o resultado bool //printf("\nO CPF já existe, favor inserir um valor diferente\n"); //scanf("%s", &par); return true;//Retorna que esta sendo usado } it = it->proximo;//Proximo node } return false;//Retorna que não esta sendo usado. } -
Correção comentada nos cases da função pesquisar, abaixo dos fgets, segue: #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <locale.h> typedef struct lista{ char nome[40]; char rua[40]; char bairro[40]; char email[40]; int telefone; char telefoneconvertido[40]; char formacao[40]; char local[40]; char cargo[40]; char idioma1[40]; int tempo; char tempoconvertido[40]; float salario; char salarioconvertido[40]; int cpf; char cpfconvertido[40]; unsigned long int codigo; struct lista* ant; struct lista* prox; }Lista; //Declaração de funções. Lista* inserir(Lista* primeiro); void listar(Lista* primeiro, Lista* point); Lista* excluir(Lista* primeiro); void alterar(Lista* primeiro); void pesquisar(Lista* primeiro); Lista *carregar(Lista* primeiro, Lista* aux, Lista* point); void escrever(Lista* primeiro); main() { setlocale(LC_ALL, "Portuguese"); //Declaração de variáveis Lista *primeiro= NULL; Lista *atual; Lista* aux; Lista* point; char opcao; primeiro = carregar(primeiro, aux, point); //Artifício para repetir o programa. while(opcao!='s') { //Menu de opções printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t RECRUTAMENTO ONLINE");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); printf(" |-----------------------------------|\n"); printf(" | <A> Novo cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <B> Listar |\n"); printf(" |-----------------------------------|\n"); printf(" | <C> Excluir cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <D> Alterar cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <E> Pesquisar cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <F> Sobre o programa |\n"); printf(" |-----------------------------------|\n"); printf(" | <S> Sair |\n"); printf(" |-----------------------------------|"); printf("\n\n\n\n"); //Lendo a opcao do menu fflush(stdin); opcao= getch(); //Menu de opções switch(opcao) { case 'A': case 'a': //Inserindo as pessoas. fflush(stdin); system("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t NOVO CADASTRO ");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); primeiro= inserir(primeiro); getch(); system("cls"); break; case 'B': case 'b': //Listando as pessoas. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t PESSOAS CADASTRADAS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); listar(primeiro, point); getch(); system("cls"); break; case 'C': case 'c': //Excluindo pessoas da lista. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t EXCLUIR CADASTROS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); primeiro= excluir(primeiro); getch(); system("cls"); break; case 'D': case 'd': //Alterando pessoas da lista. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t ALTERAR CADASTRADOS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); alterar(primeiro); getch(); system("cls"); break; case 'E': case 'e': //Pesquisando pessoas da lista. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t PESQUISAR CADASTRADOS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); pesquisar(primeiro); getch(); system("cls"); break; case 'F': case 'f': //Fala um pouco sobre como funciona o programa. system ("cls"); printf(" -----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t SOBRE O PROGRAMA");printf("\t\t\t |\n"); printf(" -----------------------------------------------------------------------------\n"); printf(" |O programa foi criado com o conceito de que candidatos a determinadas vagas|\n"); printf(" | |\n"); printf(" |de emprego poderiam ser cadastrados, adicionando dados relevantes para o |\n"); printf(" | |\n"); printf(" |empregador. O programa é destinado para o empregador que queira organizar |\n"); printf(" | |\n"); printf(" |os candidatos e tornar mais fácil o recrutamento. O programa conta com |\n"); printf(" | |\n"); printf(" |5 funcionalidades principais: cadastro, listagem de candidatos, alteração |\n"); printf(" | |\n"); printf(" |de dados, exclusão de cadastro e pesquisa de candidatos. |\n"); printf(" -----------------------------------------------------------------------------\n"); printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); getch(); system("cls"); break; case 'S': case 's': //Artifício para sair do programa. escrever(primeiro); opcao='s'; break; default: //Artifício que previne a situação de um usuário qualquer, digitar uma opcão inexistente no menu. system("cls"); break; } } } Lista* inserir (Lista *primeiro){ setlocale(LC_ALL, "Portuguese"); Lista pessoa; Lista *atual= primeiro; char identificador= 'F'; //Lendo as informações do candidato. printf(" Nome: "); fflush (stdin); fgets(pessoa.nome, 40, stdin); printf ("\n"); printf(" Rua: "); fflush (stdin); fgets(pessoa.rua, 40, stdin); printf ("\n"); printf(" Bairro: "); fflush (stdin); fgets(pessoa.bairro, 40, stdin); printf ("\n"); printf(" E-mail: "); fflush (stdin); fgets(pessoa.email, 40, stdin); printf ("\n"); printf(" Telefone: "); scanf("%d",&pessoa.telefone);printf ("\n"); printf(" Formação: "); fflush (stdin); fgets(pessoa.formacao, 40, stdin); printf ("\n"); printf(" Local de Formação: "); fflush (stdin); fgets(pessoa.local, 40, stdin); printf ("\n"); printf(" Cargo Pretendido: "); fflush (stdin); fgets(pessoa.cargo, 40, stdin); printf ("\n"); printf(" Língua Estrangeira: "); fflush (stdin); fgets(pessoa.idioma1, 40, stdin); printf ("\n"); printf(" Tempo de experiência no cargo(em anos): "); scanf("%d",&pessoa.tempo);printf ("\n"); printf(" Pretensão salarial: "); scanf("%f",&pessoa.salario);printf ("\n"); printf(" CPF: "); scanf("%d",&pessoa.cpf, 9);printf ("\n"); printf(" Código: "); scanf("%u",&pessoa.codigo);printf ("\n"); //Verificando se o cadastro já existe. for(atual=primeiro; atual!=NULL; atual=atual->prox){ if(atual->codigo==pessoa.codigo){ identificador= 'V'; break; } } if(identificador!='V' && (strlen(pessoa.nome)!=1 && strlen(pessoa.rua)!=1)){ //Alocando os espaços e guardando as informações do candidato. Lista* NovoCandidato=(Lista*) malloc (sizeof(Lista)); strcpy(NovoCandidato->nome, pessoa.nome); strcpy(NovoCandidato->rua, pessoa.rua); strcpy(NovoCandidato->bairro, pessoa.bairro); strcpy(NovoCandidato->email, pessoa.email); NovoCandidato->telefone= pessoa.telefone; strcpy(NovoCandidato->formacao, pessoa.formacao); strcpy(NovoCandidato->cargo, pessoa.cargo); strcpy(NovoCandidato->local, pessoa.local); strcpy(NovoCandidato->idioma1, pessoa.idioma1); NovoCandidato->tempo= pessoa.tempo; NovoCandidato->salario= pessoa.salario; NovoCandidato->cpf= pessoa.cpf; NovoCandidato->codigo= pessoa.codigo; NovoCandidato->prox= primeiro; printf(" Cadastro realizado com sucesso."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return NovoCandidato; }else{ printf(" Cadastro inválido."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return primeiro; } } void listar (Lista* primeiro, Lista* point){ setlocale(LC_ALL, "Portuguese"); Lista* atual;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. //Imprimindo os candidatos da lista, e suas repectivas informações. for(atual= primeiro ; atual!= NULL; atual= atual->prox){ printf("\n Nome: "); printf("%s", atual->nome); printf("\n Rua: "); printf("%s", atual->rua); printf("\n Bairro: "); printf("%s", atual->bairro); printf("\n E-mail: "); printf("%s", atual->email); printf("\n Telefone: "); printf("%d", atual->telefone); printf("\n\n Formação: "); printf("%s", atual->formacao); printf("\n Local de Formação: "); printf("%s", atual->local); printf("\n Cargo Pretendido: "); printf("%s", atual->cargo); printf("\n Língua Estrangeira: "); printf("%s", atual->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atual->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atual->salario); printf("\n\n CPF: "); printf("%d", atual->cpf); printf("\n\n Código: "); printf("%u", atual->codigo); printf("\n\n"); } if(primeiro==NULL) printf(" Nenhum candidato cadastrado."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); } Lista* excluir(Lista *primeiro){ Lista *anterior= NULL;//Ponteiro para saber o elemento anterior ao elemento atual da lista. Lista *atual= primeiro;//Ponteiro para percorrer a lista sem perder o primeiro elemento da lista. unsigned long int codigo=0; //Requisitando e lendo o código do candidato a ser excluído. printf(" Código do candidato a ser excluído: "); fflush(stdin); scanf("%u",&codigo); //Procurando o candidato na lista. while(atual!= NULL && atual->codigo!=codigo){ anterior= atual; atual= atual->prox; } //Mensagem caso o candidato não seja encontrado. if(atual==NULL){ printf("\n Candidato não encontrado."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return primeiro; } //Excluindo o primeiro candidato da lista. if(anterior==NULL){ printf("\n Conteúdo excluído com sucesso."); primeiro= atual->prox; //Excluindo um candidato do meio da lista. }else{ printf("\n Conteúdo excluído com sucesso."); anterior->prox= atual->prox; } //Desalocando o espaço da memória. free(atual); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return primeiro; } //Função para alterar candidato. void alterar(Lista* primeiro){ char nome_substituto[40], rua_substituto[40], bairro_substituto[40], email_substituto[40], formacao_substituto[40], local_substituto[40], cargo_substituto[40], idioma1_substituto[40]; char telefone_substituto[40], tempo_substituto[40], cpf_substituto[40]; char salario_substituto[40]; unsigned long int codigo; Lista* atual=primeiro; //Requisitando e lendo o código do candidato a ser alterado. printf(" Código do candidato a ser alterado: "); fflush(stdin); scanf("%u",&codigo); //Procurando o candidato na lista. while(atual!= NULL && atual->codigo!=codigo){ atual= atual->prox; } //Alterando os dados do candidato. if(atual!=NULL){ sprintf(atual->telefoneconvertido, "%i", atual->telefone); sprintf(atual->tempoconvertido, "%i", atual->tempo); sprintf(atual->cpfconvertido, "%i", atual->cpf); sprintf(atual->salarioconvertido, "%f", atual->salario); printf("\n Novo nome: "); fflush (stdin); fgets(nome_substituto, 40, stdin); strcpy(atual->nome,nome_substituto); printf("\n Nova rua: "); fflush (stdin); fgets(rua_substituto, 40, stdin); strcpy(atual->rua,rua_substituto); printf("\n Novo bairro: "); fflush (stdin); fgets(bairro_substituto, 40, stdin); strcpy(atual->bairro,bairro_substituto); printf("\n Novo e-mail: "); fflush (stdin); fgets(email_substituto, 40, stdin); strcpy(atual->email,email_substituto); printf("\n Novo telefone: "); fflush (stdin); fgets(telefone_substituto, 40, stdin); strcpy(atual->telefoneconvertido,telefone_substituto); atual->telefone=atoi(atual->telefoneconvertido); printf("\n Nova formação: "); fflush (stdin); fgets(formacao_substituto, 40, stdin); strcpy(atual->formacao,formacao_substituto); printf("\n Novo local: "); fflush (stdin); fgets(local_substituto, 40, stdin); strcpy(atual->local,local_substituto); printf("\n Novo cargo: "); fflush (stdin); fgets(cargo_substituto, 40, stdin); strcpy(atual->cargo,cargo_substituto); printf("\n Nova Língua Estrangeira: "); fflush (stdin); fgets(idioma1_substituto, 40, stdin); strcpy(atual->idioma1,idioma1_substituto); printf("\n Novo tempo de experiência no cargo: "); fflush (stdin); fgets(tempo_substituto, 40, stdin); strcpy(atual->tempoconvertido,tempo_substituto); atual->tempo=atoi(atual->tempoconvertido); printf("\n Nova pretensão salarial: "); fflush (stdin); fgets(salario_substituto, 40, stdin); strcpy(atual->salarioconvertido,salario_substituto); atual->salario=atoi(atual->salarioconvertido); printf("\n Novo cpf: "); fflush (stdin); fgets(cpf_substituto, 40, stdin); strcpy(atual->cpfconvertido,cpf_substituto); atual->cpf=atoi(atual->cpfconvertido); printf(" Dados alterados com sucesso."); }else{ printf("\n Candidato não encontrado."); } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); } void pesquisar (Lista* primeiro){ setlocale(LC_ALL, "Portuguese"); char opcao; int codigopesquisa; int salariopesquisa; int tempopesquisa; char nomepesquisa[40]; char formacaopesquisa[40]; char cargopesquisa[40]; char idioma1pesquisa[40]; printf(" |-----------------------------------| \n"); printf(" | <A> Nome |\n"); printf(" |-----------------------------------|\n"); printf(" | <B> Código |\n"); printf(" |-----------------------------------|\n"); printf(" | <C> Formação |\n"); printf(" |-----------------------------------|\n"); printf(" | <D> Cargo |\n"); printf(" |-----------------------------------|\n"); printf(" | <E> Língua Estrangeira |\n"); printf(" |-----------------------------------|\n"); printf(" | <F> Salário Pretendido |\n"); printf(" |-----------------------------------|\n"); printf(" | <G> Tempo de Experiência |\n"); printf(" |-----------------------------------|\n"); printf("\n\n\n\n"); //Lendo a opcao do menu fflush(stdin); opcao= getch(); //Menu de opções switch(opcao) { case 'A': case 'a': //Pesquisando por nome. system ("cls"); Lista* atualnome;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Nome a ser pesquisado: "); fflush (stdin); fgets(nomepesquisa, 40, stdin); nomepesquisa[strlen(nomepesquisa)-1] = '\0';//Determina fim da string digitada, se não usar, sera informada uma string incorreta e nunca //Encontraremos um valor no banco de dados for(atualnome= primeiro ; atualnome!= NULL; atualnome= atualnome->prox){ if(strcmp(atualnome->nome, nomepesquisa) == 0){ printf("\n Nome: "); printf("%s", atualnome->nome); printf("\n Rua: "); printf("%s", atualnome->rua); printf("\n Bairro: "); printf("%s", atualnome->bairro); printf("\n E-mail: "); printf("%s", atualnome->email); printf("\n Telefone: "); printf("%d", atualnome->telefone); printf("\n\n Formação: "); printf("%s", atualnome->formacao); printf("\n Local de Formação: "); printf("%s", atualnome->local); printf("\n Cargo Pretendido: "); printf("%s", atualnome->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualnome->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualnome->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualnome->salario); printf("\n\n CPF: "); printf("%d", atualnome->cpf); printf("\n\n Código: "); printf("%u", atualnome->codigo); printf("\n\n"); } } break; case 'B': case 'b': //Pesquisando por código. system ("cls"); Lista* atualcodigo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Código a ser pesquisado: "); scanf("%d", &codigopesquisa); for(atualcodigo= primeiro ; atualcodigo!= NULL; atualcodigo= atualcodigo->prox){ if(atualcodigo->codigo==codigopesquisa){ printf("\n Nome: "); printf("%s", atualcodigo->nome); printf("\n Rua: "); printf("%s", atualcodigo->rua); printf("\n Bairro: "); printf("%s", atualcodigo->bairro); printf("\n E-mail: "); printf("%s", atualcodigo->email); printf("\n Telefone: "); printf("%d", atualcodigo->telefone); printf("\n\n Formação: "); printf("%s", atualcodigo->formacao); printf("\n Local de Formação: "); printf("%s", atualcodigo->local); printf("\n Cargo Pretendido: "); printf("%s", atualcodigo->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualcodigo->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualcodigo->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualcodigo->salario); printf("\n\n CPF: "); printf("%d", atualcodigo->cpf); printf("\n\n Código: "); printf("%u", atualcodigo->codigo); printf("\n\n"); } } break; case 'C': case 'c': //Pesquisando por formação. system ("cls"); Lista* atualformacao;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Formação a ser pesquisada: "); fflush (stdin); fgets(formacaopesquisa, 40, stdin); formacaopesquisa[strlen(formacaopesquisa)-1] = '\0';//Determina fim da string digitada, se não usar, sera informada uma string incorreta e nunca //Encontraremos um valor no banco de dados for(atualformacao= primeiro ; atualformacao!= NULL; atualformacao= atualformacao->prox){ if(strcmp(atualformacao->formacao, formacaopesquisa) == 0){ printf("\n Nome: "); printf("%s", atualformacao->nome); printf("\n Rua: "); printf("%s", atualformacao->rua); printf("\n Bairro: "); printf("%s", atualformacao->bairro); printf("\n E-mail: "); printf("%s", atualformacao->email); printf("\n Telefone: "); printf("%d", atualformacao->telefone); printf("\n\n Formação: "); printf("%s", atualformacao->formacao); printf("\n Local de Formação: "); printf("%s", atualformacao->local); printf("\n Cargo Pretendido: "); printf("%s", atualformacao->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualformacao->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualformacao->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualformacao->salario); printf("\n\n CPF: "); printf("%d", atualformacao->cpf); printf("\n\n Código: "); printf("%u", atualformacao->codigo); printf("\n\n"); } } break; case 'D': case 'd': //Pesquisando por cargo. system ("cls"); Lista* atualcargo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Cargo a ser pesquisado: "); fflush (stdin); fgets(cargopesquisa, 40, stdin); cargopesquisa[strlen(cargopesquisa)-1] = '\0';//Determina fim da string digitada, se não usar, sera informada uma string incorreta e nunca //Encontraremos um valor no banco de dados for(atualcargo= primeiro ; atualcargo!= NULL; atualcargo= atualcargo->prox){ if(strcmp(atualcargo->cargo, cargopesquisa) == 0){ printf("\n Nome: "); printf("%s", atualcargo->nome); printf("\n Rua: "); printf("%s", atualcargo->rua); printf("\n Bairro: "); printf("%s", atualcargo->bairro); printf("\n E-mail: "); printf("%s", atualcargo->email); printf("\n Telefone: "); printf("%d", atualcargo->telefone); printf("\n\n Formação: "); printf("%s", atualcargo->formacao); printf("\n Local de Formação: "); printf("%s", atualcargo->local); printf("\n Cargo Pretendido: "); printf("%s", atualcargo->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualcargo->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualcargo->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualcargo->salario); printf("\n\n CPF: "); printf("%d", atualcargo->cpf); printf("\n\n Código: "); printf("%u", atualcargo->codigo); printf("\n\n"); } } break; case 'E': case 'e': //Pesquisando por língua estrangeira. system ("cls"); Lista* atualidioma1;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Língua estrangeira a ser pesquisada: "); fflush (stdin); fgets(idioma1pesquisa, 40, stdin); idioma1pesquisa[strlen(idioma1pesquisa)-1] = '\0';//Determina fim da string digitada, se não usar, sera informada uma string incorreta e nunca //Encontraremos um valor no banco de dados for(atualidioma1= primeiro ; atualidioma1!= NULL; atualidioma1= atualidioma1->prox){ if(strcmp(atualidioma1->idioma1, idioma1pesquisa) == 0){ printf("\n Nome: "); printf("%s", atualidioma1->nome); printf("\n Rua: "); printf("%s", atualidioma1->rua); printf("\n Bairro: "); printf("%s", atualidioma1->bairro); printf("\n E-mail: "); printf("%s", atualidioma1->email); printf("\n Telefone: "); printf("%d", atualidioma1->telefone); printf("\n\n Formação: "); printf("%s", atualidioma1->formacao); printf("\n Local de Formação: "); printf("%s", atualidioma1->local); printf("\n Cargo Pretendido: "); printf("%s", atualidioma1->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualidioma1->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualidioma1->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualidioma1->salario); printf("\n\n CPF: "); printf("%d", atualidioma1->cpf); printf("\n\n Código: "); printf("%u", atualidioma1->codigo); printf("\n\n"); } } break; case 'F': case 'f': //Pesquisando por salário. system ("cls"); Lista* atualsalario;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Salário máximo a ser pesquisado: "); scanf("%d", &salariopesquisa); for(atualsalario= primeiro ; atualsalario!= NULL; atualsalario= atualsalario->prox){ if(atualsalario->salario<=salariopesquisa){ printf("\n Nome: "); printf("%s", atualsalario->nome); printf("\n Rua: "); printf("%s", atualsalario->rua); printf("\n Bairro: "); printf("%s", atualsalario->bairro); printf("\n E-mail: "); printf("%s", atualsalario->email); printf("\n Telefone: "); printf("%d", atualsalario->telefone); printf("\n\n Formação: "); printf("%s", atualsalario->formacao); printf("\n Local de Formação: "); printf("%s", atualsalario->local); printf("\n Cargo Pretendido: "); printf("%s", atualsalario->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualsalario->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualsalario->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualsalario->salario); printf("\n\n CPF: "); printf("%d", atualsalario->cpf); printf("\n\n Código: "); printf("%u", atualsalario->codigo); printf("\n\n"); } } break; case 'G': case 'g': //Pesquisando por tempo de experiência. system ("cls"); Lista* atualtempo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Tempo mínimo de experiência a ser pesquisado: "); scanf("%d", &tempopesquisa); for(atualtempo= primeiro ; atualtempo!= NULL; atualtempo= atualtempo->prox){ if(atualtempo->tempo>=tempopesquisa){ printf("\n Nome: "); printf("%s", atualtempo->nome); printf("\n Rua: "); printf("%s", atualtempo->rua); printf("\n Bairro: "); printf("%s", atualtempo->bairro); printf("\n E-mail: "); printf("%s", atualtempo->email); printf("\n Telefone: "); printf("%d", atualtempo->telefone); printf("\n\n Formação: "); printf("%s", atualtempo->formacao); printf("\n Local de Formação: "); printf("%s", atualtempo->local); printf("\n Cargo Pretendido: "); printf("%s", atualtempo->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualtempo->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualtempo->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualtempo->salario); printf("\n\n CPF: "); printf("%d", atualtempo->cpf); printf("\n\n Código: "); printf("%u", atualtempo->codigo); printf("\n\n"); } } break; default: //Artifício que previne a situação de um usuário qualquer, digitar uma opcão inexistente no menu. system("cls"); break; } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); } void escrever(Lista* primeiro){ Lista *atual; FILE *f; f = fopen("dados.txt", "w"); for(atual= primeiro ; atual!= NULL; atual= atual->prox){ fprintf(f, "%s %s %s %s %d\n", atual->nome, atual->rua, atual->bairro, atual->email, atual->telefone); fprintf(f, "%s %s %s %s %d\n", atual->formacao, atual->local, atual->cargo, atual->idioma1, atual->tempo); fprintf(f, "%f %d %d\n", atual->salario, atual->cpf, atual->codigo); } fclose(f); } Lista *carregar(Lista *primeiro, Lista *aux, Lista *point){ FILE *f; primeiro = (Lista *)malloc(sizeof(Lista)); f = fopen("dados.txt", "r+"); point = primeiro; while(!feof(f)){ fscanf(f, "%s %s %s %s %d", point->nome, point->rua, point->bairro, point->email, &point->telefone); fscanf(f, "%s %s %s %s %d", point->formacao ,point->local, point->cargo, point->idioma1, &point->tempo); fscanf(f, "%f %d %d\n", &point->salario, &point->cpf, &point->codigo); aux = point; point = (Lista *)malloc(sizeof(Lista)); aux->prox = (Lista *)malloc(sizeof(Lista)); point = aux->prox; } aux->prox = 0; fclose(f); return primeiro; } Dica para otimizar seu programa: na struct lista você poderia utilizar ponteiros(como: char *nome em vez de char nome[40]) para as strings, pois assim você so usara a memoria que fosse necessária na hora da alocação de memoria, é só criar uma variável como char buffer[512] e utilizar ela para armazenar as string na função inserir, depois aloca as variaveis da struct lista de acordo com o tamanho da string digitada pelo usuário. Exemplo: /* 1FreakDay @2016 */ #include <stdio.h>//printf #include <string.h>//strlen #include <stdlib.h>//exit #include <malloc.h>//malloc char *alocar_string(int); int main(){ char StringA[40]; char *StringB; printf("Digite uma string:"); gets(StringA); StringB = alocar_string(strlen(StringA));//Aloca string b para uma memoria menor que o indice maximo da String A e usando seu tamanho strcpy(StringB, StringA);//Copia a string a para b printf("Tamanho da string A: %d %s \n", sizeof(StringA), StringA); printf("Tamanho da string B: %d %s \n",strlen(StringA), StringB); free(StringB); exit(0); } char *alocar_string(int tamanho){ char *str = (char *)malloc(sizeof(char)*tamanho);//str[tamanho] if(str == NULL){//Nao conseguiu alocar memoria printf("Falha ao alocar memoria!\n"); exit(0); } return str;//Retorna um ponteiro para memoria alocada }
-
Esse bug acontece quando há um problema na leitura do arquivo, faça o seguinte, apaga o arquivo que você possui, abra o programa e insira os clientes, e saia do programa, mas quando fizer não modifique o arquivo, depois abra o programa e veja se funcionou.
-
Antes temos que saber se ele foi inserido, ja que é ai que recebemos dados, segue o codigo: #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <locale.h> typedef struct lista{ char nome[40]; char rua[40]; char bairro[40]; char email[40]; int telefone; char telefoneconvertido[40]; char formacao[40]; char local[40]; char cargo[40]; char idioma1[40]; int tempo; char tempoconvertido[40]; float salario; char salarioconvertido[40]; int cpf; char cpfconvertido[40]; unsigned long int codigo; struct lista* ant; struct lista* prox; }Lista; //Declaração de funções. Lista* inserir(Lista* primeiro); void listar(Lista* primeiro, Lista* point); Lista* excluir(Lista* primeiro); void alterar(Lista* primeiro); void pesquisar(Lista* primeiro); Lista *carregar(Lista* primeiro, Lista* aux, Lista* point); void escrever(Lista* primeiro); main() { setlocale(LC_ALL, "Portuguese"); //Declaração de variáveis Lista *primeiro= NULL; Lista *atual; Lista* aux; Lista* point; char opcao; primeiro = carregar(primeiro, aux, point); //Artifício para repetir o programa. while(opcao!='s') { //Menu de opções printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t RECRUTAMENTO ONLINE");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); printf(" |-----------------------------------|\n"); printf(" | <A> Novo cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <B> Listar |\n"); printf(" |-----------------------------------|\n"); printf(" | <C> Excluir cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <D> Alterar cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <E> Pesquisar cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <F> Sobre o programa |\n"); printf(" |-----------------------------------|\n"); printf(" | <S> Sair |\n"); printf(" |-----------------------------------|"); printf("\n\n\n\n"); //Lendo a opcao do menu fflush(stdin); opcao= getch(); //Menu de opções switch(opcao) { case 'A': case 'a': //Inserindo as pessoas. fflush(stdin); system("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t NOVO CADASTRO ");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); primeiro= inserir(primeiro); getch(); system("cls"); break; case 'B': case 'b': //Listando as pessoas. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t PESSOAS CADASTRADAS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); listar(primeiro, point); getch(); system("cls"); break; case 'C': case 'c': //Excluindo pessoas da lista. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t EXCLUIR CADASTROS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); primeiro= excluir(primeiro); getch(); system("cls"); break; case 'D': case 'd': //Alterando pessoas da lista. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t ALTERAR CADASTRADOS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); alterar(primeiro); getch(); system("cls"); break; case 'E': case 'e': //Pesquisando pessoas da lista. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t PESQUISAR CADASTRADOS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); pesquisar(primeiro); getch(); system("cls"); break; case 'F': case 'f': //Fala um pouco sobre como funciona o programa. system ("cls"); printf(" -----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t SOBRE O PROGRAMA");printf("\t\t\t |\n"); printf(" -----------------------------------------------------------------------------\n"); printf(" |O programa foi criado com o conceito de que candidatos a determinadas vagas|\n"); printf(" | |\n"); printf(" |de emprego poderiam ser cadastrados, adicionando dados relevantes para o |\n"); printf(" | |\n"); printf(" |empregador. O programa é destinado para o empregador que queira organizar |\n"); printf(" | |\n"); printf(" |os candidatos e tornar mais fácil o recrutamento. O programa conta com |\n"); printf(" | |\n"); printf(" |5 funcionalidades principais: cadastro, listagem de candidatos, alteração |\n"); printf(" | |\n"); printf(" |de dados, exclusão de cadastro e pesquisa de candidatos. |\n"); printf(" -----------------------------------------------------------------------------\n"); printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); getch(); system("cls"); break; case 'S': case 's': //Artifício para sair do programa. escrever(primeiro); opcao='s'; break; default: //Artifício que previne a situação de um usuário qualquer, digitar uma opcão inexistente no menu. system("cls"); break; } } } Lista* inserir (Lista *primeiro){ setlocale(LC_ALL, "Portuguese"); Lista pessoa; Lista *atual= primeiro; char identificador= 'F'; //Lendo as informações do candidato. printf(" Nome: "); fflush (stdin); fgets(pessoa.nome, 40, stdin); printf ("\n"); printf(" Rua: "); fflush (stdin); fgets(pessoa.rua, 40, stdin); printf ("\n"); printf(" Bairro: "); fflush (stdin); fgets(pessoa.bairro, 40, stdin); printf ("\n"); printf(" E-mail: "); fflush (stdin); fgets(pessoa.email, 40, stdin); printf ("\n"); printf(" Telefone: "); scanf("%d",&pessoa.telefone);printf ("\n"); printf(" Formação: "); fflush (stdin); fgets(pessoa.formacao, 40, stdin); printf ("\n"); printf(" Local de Formação: "); fflush (stdin); fgets(pessoa.local, 40, stdin); printf ("\n"); printf(" Cargo Pretendido: "); fflush (stdin); fgets(pessoa.cargo, 40, stdin); printf ("\n"); printf(" Língua Estrangeira: "); fflush (stdin); fgets(pessoa.idioma1, 40, stdin); printf ("\n"); printf(" Tempo de experiência no cargo(em anos): "); scanf("%d",&pessoa.tempo);printf ("\n"); printf(" Pretensão salarial: "); scanf("%f",&pessoa.salario);printf ("\n"); printf(" CPF: "); scanf("%d",&pessoa.cpf, 9);printf ("\n"); printf(" Código: "); scanf("%u",&pessoa.codigo);printf ("\n"); //Verificando se o cadastro já existe. for(atual=primeiro; atual!=NULL; atual=atual->prox){ if(atual->codigo==pessoa.codigo){ identificador= 'V'; break; } } if(identificador!='V' && (strlen(pessoa.nome)!=1 && strlen(pessoa.rua)!=1)){ //Alocando os espaços e guardando as informações do candidato. Lista* NovoCandidato=(Lista*) malloc (sizeof(Lista)); strcpy(NovoCandidato->nome, pessoa.nome); strcpy(NovoCandidato->rua, pessoa.rua); strcpy(NovoCandidato->bairro, pessoa.bairro); strcpy(NovoCandidato->email, pessoa.email); NovoCandidato->telefone= pessoa.telefone; strcpy(NovoCandidato->formacao, pessoa.formacao); strcpy(NovoCandidato->cargo, pessoa.cargo); strcpy(NovoCandidato->local, pessoa.local); strcpy(NovoCandidato->idioma1, pessoa.idioma1); NovoCandidato->tempo= pessoa.tempo; NovoCandidato->salario= pessoa.salario; NovoCandidato->cpf= pessoa.cpf; NovoCandidato->codigo= pessoa.codigo; NovoCandidato->prox= primeiro; printf(" Cadastro realizado com sucesso."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return NovoCandidato; }else{ printf(" Cadastro inválido."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return primeiro; } } void listar (Lista* primeiro, Lista* point){ setlocale(LC_ALL, "Portuguese"); Lista* atual;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. //Imprimindo os candidatos da lista, e suas repectivas informações. for(atual= primeiro ; atual!= NULL; atual= atual->prox){ printf("\n Nome: "); printf("%s", atual->nome); printf("\n Rua: "); printf("%s", atual->rua); printf("\n Bairro: "); printf("%s", atual->bairro); printf("\n E-mail: "); printf("%s", atual->email); printf("\n Telefone: "); printf("%d", atual->telefone); printf("\n\n Formação: "); printf("%s", atual->formacao); printf("\n Local de Formação: "); printf("%s", atual->local); printf("\n Cargo Pretendido: "); printf("%s", atual->cargo); printf("\n Língua Estrangeira: "); printf("%s", atual->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atual->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atual->salario); printf("\n\n CPF: "); printf("%d", atual->cpf); printf("\n\n Código: "); printf("%u", atual->codigo); printf("\n\n"); } if(primeiro==NULL) printf(" Nenhum candidato cadastrado."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); } Lista* excluir(Lista *primeiro){ Lista *anterior= NULL;//Ponteiro para saber o elemento anterior ao elemento atual da lista. Lista *atual= primeiro;//Ponteiro para percorrer a lista sem perder o primeiro elemento da lista. unsigned long int codigo=0; //Requisitando e lendo o código do candidato a ser excluído. printf(" Código do candidato a ser excluído: "); fflush(stdin); scanf("%u",&codigo); //Procurando o candidato na lista. while(atual!= NULL && atual->codigo!=codigo){ anterior= atual; atual= atual->prox; } //Mensagem caso o candidato não seja encontrado. if(atual==NULL){ printf("\n Candidato não encontrado."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return primeiro; } //Excluindo o primeiro candidato da lista. if(anterior==NULL){ printf("\n Conteúdo excluído com sucesso."); primeiro= atual->prox; //Excluindo um candidato do meio da lista. }else{ printf("\n Conteúdo excluído com sucesso."); anterior->prox= atual->prox; } //Desalocando o espaço da memória. free(atual); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return primeiro; } //Função para alterar candidato. void alterar(Lista* primeiro){ char nome_substituto[40], rua_substituto[40], bairro_substituto[40], email_substituto[40], formacao_substituto[40], local_substituto[40], cargo_substituto[40], idioma1_substituto[40]; char telefone_substituto[40], tempo_substituto[40], cpf_substituto[40]; char salario_substituto[40]; unsigned long int codigo; Lista* atual=primeiro; //Requisitando e lendo o código do candidato a ser alterado. printf(" Código do candidato a ser alterado: "); fflush(stdin); scanf("%u",&codigo); //Procurando o candidato na lista. while(atual!= NULL && atual->codigo!=codigo){ atual= atual->prox; } //Alterando os dados do candidato. if(atual!=NULL){ sprintf(atual->telefoneconvertido, "%i", atual->telefone); sprintf(atual->tempoconvertido, "%i", atual->tempo); sprintf(atual->cpfconvertido, "%i", atual->cpf); sprintf(atual->salarioconvertido, "%f", atual->salario); printf("\n Novo nome: "); fflush (stdin); fgets(nome_substituto, 40, stdin); strcpy(atual->nome,nome_substituto); printf("\n Nova rua: "); fflush (stdin); fgets(rua_substituto, 40, stdin); strcpy(atual->rua,rua_substituto); printf("\n Novo bairro: "); fflush (stdin); fgets(bairro_substituto, 40, stdin); strcpy(atual->bairro,bairro_substituto); printf("\n Novo e-mail: "); fflush (stdin); fgets(email_substituto, 40, stdin); strcpy(atual->email,email_substituto); printf("\n Novo telefone: "); fflush (stdin); fgets(telefone_substituto, 40, stdin); strcpy(atual->telefoneconvertido,telefone_substituto); atual->telefone=atoi(atual->telefoneconvertido); printf("\n Nova formação: "); fflush (stdin); fgets(formacao_substituto, 40, stdin); strcpy(atual->formacao,formacao_substituto); printf("\n Novo local: "); fflush (stdin); fgets(local_substituto, 40, stdin); strcpy(atual->local,local_substituto); printf("\n Novo cargo: "); fflush (stdin); fgets(cargo_substituto, 40, stdin); strcpy(atual->cargo,cargo_substituto); printf("\n Nova Língua Estrangeira: "); fflush (stdin); fgets(idioma1_substituto, 40, stdin); strcpy(atual->idioma1,idioma1_substituto); printf("\n Novo tempo de experiência no cargo: "); fflush (stdin); fgets(tempo_substituto, 40, stdin); strcpy(atual->tempoconvertido,tempo_substituto); atual->tempo=atoi(atual->tempoconvertido); printf("\n Nova pretensão salarial: "); fflush (stdin); fgets(salario_substituto, 40, stdin); strcpy(atual->salarioconvertido,salario_substituto); atual->salario=atoi(atual->salarioconvertido); printf("\n Novo cpf: "); fflush (stdin); fgets(cpf_substituto, 40, stdin); strcpy(atual->cpfconvertido,cpf_substituto); atual->cpf=atoi(atual->cpfconvertido); printf(" Dados alterados com sucesso."); }else{ printf("\n Candidato não encontrado."); } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); } void pesquisar (Lista* primeiro){ setlocale(LC_ALL, "Portuguese"); char opcao; int codigopesquisa; int salariopesquisa; int tempopesquisa; char nomepesquisa[40]; char formacaopesquisa[40]; char cargopesquisa[40]; char idioma1pesquisa[40]; printf(" |-----------------------------------| \n"); printf(" | <A> Nome |\n"); printf(" |-----------------------------------|\n"); printf(" | <B> Código |\n"); printf(" |-----------------------------------|\n"); printf(" | <C> Formação |\n"); printf(" |-----------------------------------|\n"); printf(" | <D> Cargo |\n"); printf(" |-----------------------------------|\n"); printf(" | <E> Língua Estrangeira |\n"); printf(" |-----------------------------------|\n"); printf(" | <F> Salário Pretendido |\n"); printf(" |-----------------------------------|\n"); printf(" | <G> Tempo de Experiência |\n"); printf(" |-----------------------------------|\n"); printf("\n\n\n\n"); //Lendo a opcao do menu fflush(stdin); opcao= getch(); //Menu de opções switch(opcao) { case 'A': case 'a': //Pesquisando por nome. system ("cls"); Lista* atualnome;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Nome a ser pesquisado: "); fflush (stdin); fgets(nomepesquisa, 40, stdin); for(atualnome= primeiro ; atualnome!= NULL; atualnome= atualnome->prox){ if(strcmp(atualnome->nome, nomepesquisa) == 0){ printf("\n Nome: "); printf("%s", atualnome->nome); printf("\n Rua: "); printf("%s", atualnome->rua); printf("\n Bairro: "); printf("%s", atualnome->bairro); printf("\n E-mail: "); printf("%s", atualnome->email); printf("\n Telefone: "); printf("%d", atualnome->telefone); printf("\n\n Formação: "); printf("%s", atualnome->formacao); printf("\n Local de Formação: "); printf("%s", atualnome->local); printf("\n Cargo Pretendido: "); printf("%s", atualnome->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualnome->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualnome->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualnome->salario); printf("\n\n CPF: "); printf("%d", atualnome->cpf); printf("\n\n Código: "); printf("%u", atualnome->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'B': case 'b': //Pesquisando por código. system ("cls"); Lista* atualcodigo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Código a ser pesquisado: "); scanf("%d", &codigopesquisa); for(atualcodigo= primeiro ; atualcodigo!= NULL; atualcodigo= atualcodigo->prox){ if(atualcodigo->codigo==codigopesquisa){ printf("\n Nome: "); printf("%s", atualcodigo->nome); printf("\n Rua: "); printf("%s", atualcodigo->rua); printf("\n Bairro: "); printf("%s", atualcodigo->bairro); printf("\n E-mail: "); printf("%s", atualcodigo->email); printf("\n Telefone: "); printf("%d", atualcodigo->telefone); printf("\n\n Formação: "); printf("%s", atualcodigo->formacao); printf("\n Local de Formação: "); printf("%s", atualcodigo->local); printf("\n Cargo Pretendido: "); printf("%s", atualcodigo->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualcodigo->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualcodigo->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualcodigo->salario); printf("\n\n CPF: "); printf("%d", atualcodigo->cpf); printf("\n\n Código: "); printf("%u", atualcodigo->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'C': case 'c': //Pesquisando por formação. system ("cls"); Lista* atualformacao;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Formação a ser pesquisada: "); fflush (stdin); fgets(formacaopesquisa, 40, stdin); for(atualformacao= primeiro ; atualformacao!= NULL; atualformacao= atualformacao->prox){ if(strcmp(atualformacao->formacao, formacaopesquisa) == 0){ printf("\n Nome: "); printf("%s", atualformacao->nome); printf("\n Rua: "); printf("%s", atualformacao->rua); printf("\n Bairro: "); printf("%s", atualformacao->bairro); printf("\n E-mail: "); printf("%s", atualformacao->email); printf("\n Telefone: "); printf("%d", atualformacao->telefone); printf("\n\n Formação: "); printf("%s", atualformacao->formacao); printf("\n Local de Formação: "); printf("%s", atualformacao->local); printf("\n Cargo Pretendido: "); printf("%s", atualformacao->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualformacao->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualformacao->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualformacao->salario); printf("\n\n CPF: "); printf("%d", atualformacao->cpf); printf("\n\n Código: "); printf("%u", atualformacao->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'D': case 'd': //Pesquisando por cargo. system ("cls"); Lista* atualcargo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Cargo a ser pesquisado: "); fflush (stdin); fgets(cargopesquisa, 40, stdin); for(atualcargo= primeiro ; atualcargo!= NULL; atualcargo= atualcargo->prox){ if(strcmp(atualcargo->cargo, cargopesquisa) == 0){ printf("\n Nome: "); printf("%s", atualcargo->nome); printf("\n Rua: "); printf("%s", atualcargo->rua); printf("\n Bairro: "); printf("%s", atualcargo->bairro); printf("\n E-mail: "); printf("%s", atualcargo->email); printf("\n Telefone: "); printf("%d", atualcargo->telefone); printf("\n\n Formação: "); printf("%s", atualcargo->formacao); printf("\n Local de Formação: "); printf("%s", atualcargo->local); printf("\n Cargo Pretendido: "); printf("%s", atualcargo->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualcargo->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualcargo->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualcargo->salario); printf("\n\n CPF: "); printf("%d", atualcargo->cpf); printf("\n\n Código: "); printf("%u", atualcargo->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'E': case 'e': //Pesquisando por língua estrangeira. system ("cls"); Lista* atualidioma1;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Língua estrangeira a ser pesquisada: "); fflush (stdin); fgets(idioma1pesquisa, 40, stdin); for(atualidioma1= primeiro ; atualidioma1!= NULL; atualidioma1= atualidioma1->prox){ if(strcmp(atualidioma1->idioma1, idioma1pesquisa) == 0){ printf("\n Nome: "); printf("%s", atualidioma1->nome); printf("\n Rua: "); printf("%s", atualidioma1->rua); printf("\n Bairro: "); printf("%s", atualidioma1->bairro); printf("\n E-mail: "); printf("%s", atualidioma1->email); printf("\n Telefone: "); printf("%d", atualidioma1->telefone); printf("\n\n Formação: "); printf("%s", atualidioma1->formacao); printf("\n Local de Formação: "); printf("%s", atualidioma1->local); printf("\n Cargo Pretendido: "); printf("%s", atualidioma1->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualidioma1->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualidioma1->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualidioma1->salario); printf("\n\n CPF: "); printf("%d", atualidioma1->cpf); printf("\n\n Código: "); printf("%u", atualidioma1->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'F': case 'f': //Pesquisando por salário. system ("cls"); Lista* atualsalario;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Salário máximo a ser pesquisado: "); scanf("%d", &salariopesquisa); for(atualsalario= primeiro ; atualsalario!= NULL; atualsalario= atualsalario->prox){ if(atualsalario->salario<=salariopesquisa){ printf("\n Nome: "); printf("%s", atualsalario->nome); printf("\n Rua: "); printf("%s", atualsalario->rua); printf("\n Bairro: "); printf("%s", atualsalario->bairro); printf("\n E-mail: "); printf("%s", atualsalario->email); printf("\n Telefone: "); printf("%d", atualsalario->telefone); printf("\n\n Formação: "); printf("%s", atualsalario->formacao); printf("\n Local de Formação: "); printf("%s", atualsalario->local); printf("\n Cargo Pretendido: "); printf("%s", atualsalario->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualsalario->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualsalario->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualsalario->salario); printf("\n\n CPF: "); printf("%d", atualsalario->cpf); printf("\n\n Código: "); printf("%u", atualsalario->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'G': case 'g': //Pesquisando por tempo de experiência. system ("cls"); Lista* atualtempo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Tempo mínimo de experiência a ser pesquisado: "); scanf("%d", &tempopesquisa); for(atualtempo= primeiro ; atualtempo!= NULL; atualtempo= atualtempo->prox){ if(atualtempo->tempo>=tempopesquisa){ printf("\n Nome: "); printf("%s", atualtempo->nome); printf("\n Rua: "); printf("%s", atualtempo->rua); printf("\n Bairro: "); printf("%s", atualtempo->bairro); printf("\n E-mail: "); printf("%s", atualtempo->email); printf("\n Telefone: "); printf("%d", atualtempo->telefone); printf("\n\n Formação: "); printf("%s", atualtempo->formacao); printf("\n Local de Formação: "); printf("%s", atualtempo->local); printf("\n Cargo Pretendido: "); printf("%s", atualtempo->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualtempo->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualtempo->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualtempo->salario); printf("\n\n CPF: "); printf("%d", atualtempo->cpf); printf("\n\n Código: "); printf("%u", atualtempo->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; default: //Artifício que previne a situação de um usuário qualquer, digitar uma opcão inexistente no menu. system("cls"); break; } } void escrever(Lista* primeiro){ Lista *atual; FILE *f; f = fopen("dados.txt", "w"); for(atual= primeiro ; atual!= NULL; atual= atual->prox){ fprintf(f, "%s %s %s %s %d\n", atual->nome, atual->rua, atual->bairro, atual->email, atual->telefone); fprintf(f, "%s %s %s %s %d\n", atual->formacao, atual->local, atual->cargo, atual->idioma1, atual->tempo); fprintf(f, "%f %d %d\n", atual->salario, atual->cpf, atual->codigo); } fclose(f); } Lista *carregar(Lista *primeiro, Lista *aux, Lista *point){ FILE *f; primeiro = (Lista *)malloc(sizeof(Lista)); f = fopen("dados.txt", "r+"); point = primeiro; while(!feof(f)){ fscanf(f, "%s %s %s %s %d", point->nome, point->rua, point->bairro, point->email, &point->telefone); fscanf(f, "%s %s %s %s %d", point->formacao ,point->local, point->cargo, point->idioma1, &point->tempo); fscanf(f, "%f %d %d\n", &point->salario, &point->cpf, &point->codigo); aux = point; point = (Lista *)malloc(sizeof(Lista)); aux->prox = (Lista *)malloc(sizeof(Lista)); point = aux->prox; } aux->prox = 0; fclose(f); return primeiro; } Não precisa se preocupar se a estrutura do arquivo parecer estar errada, pois quando é carregado ele auto-corrige, se você quiser usar o separador | para os dados no arquivo você tem que criar um interpretador, obter a string do arquivo e armazenar os dados corretamente.
-
Em fscanf, na função carregar(), você tem que usar do mesmo jeito que usou para salvar com fprintf, como a seguinte linha: "%s\n|%s\n|%s\n|%s\n|%d" deveria ser: "%s|%s|%s|%s|%d", ja que os dados estão na mesma linha, se você colocar \n ele ira ler a próxima linha.
-
Explicação no código: #include <stdio.h> #include <stdlib.h> #include <ctype.h>//isdigit(int) int conta_vogais(char string[]) { int i=0; int vogais=0; while(string[i] !='\0'){//sempre usar o indice [int] if(string[i]=='a'||string[i]=='A'){ vogais++; } else if(string[i]=='e'||string[i]=='E'){//como nao vamos verificar o valor duas vezes caso ja encontramos acima, temos que usar else, vogais++; //assim se encontrarmos em um dos else ifs, ele não ira ver nos outros abaixos. } else if(string[i]=='i'||string[i]=='I'){ vogais++; } else if(string[i]=='o'||string[i]=='O'){ vogais++; } else if(string[i]=='u'||string[i]=='U'){ vogais++; } i++; } return vogais; } int main(void) { int soma; int consoantes = 0; int j=0; char uma_string[]="Sou uma string"; while (uma_string[j]!='\0'){ if(uma_string[j] != ' ' && !isdigit(uma_string[j])) //Se não for espaco e numero consoantes++;//então acrescentar consoantes - sendo que so depois obtemos o valor original de consoantes j++; } int vogais=conta_vogais(uma_string);//Obter valor de vogais consoantes-=vogais;//consoantes = consoantes - vogais , obter valor original de consoantes printf("Vogais:%d\n", vogais); printf("Consoantes=%d\n", consoantes); system("pause"); } Portanto, seu único erro deve ter sido o não uso de índice , no vetor string em conta_vogais(), portanto não sei dizer, pois poderia ter sido removido se você postou o codigo direto sem <> code.
-
Não possuo vinculo ao desenvolvimento do programa no link, então não posso lhe responder duvidas sobre o código, talvez sobre seu funcionamento, porém segue o link de um programa que possa resolver a situação: https://github.com/arhuaco/junkcode/blob/master/junk/serial-sniffer/rs232-sniffer.c
-
Quando você usa assim: subtracao = vetor - vetor[i+1]; sem identificar se o i+1 é maior que o índice máximo do vetor, pode ocorrer algum problema, pois essa área não foi alocada pelo vetor, exemplo: Tenho um vetor: v[2]; sendo que seu índice pode ser v[0] e v[1], então meu loop encerrara caso i >= 2, e o corpo do loop em execução seria: subtracao = v[0] - v[0+1] subtracao = v[1] - v[1+1] <---- então aqui iria ocorrer problemas pois nosso vetor não possui o índice máximo 2
-
Apesar do 'código gerado' for um vetor int, os valores representam caracteres, então você poderia criar um vetor char(string) do mesmo tamanho do 'codigo gerado' e passar esses caracteres do codigo para essa nova string e assim você pode comparar com a 'string digitada'. P.S: Quando você tem um problema em um código, e ele ter outros problemas, você não precisa criar outro tópico para resolver cada problema, apenas crie 'um' tópico para resolver o código, independente de quantos problemas houver.
-
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <locale.h> int*vetorCaptcha(){ int cont, vetorDeCaptcha[18], vetorDeNumeroAleatorio[6]; int *vetorCaptchaFinal = (int *) malloc(sizeof(int)*18);//Cria um ponteiro e aponta para memoria alocada, caso você usasse [], e saisse da função a //variavel seria destruida. //Mas se você retornar um ponteiro para uma memoria alocada, não vai ser destruido ao sair da função. //Se não quiser usar malloc, //você pode usar um parametro na chamada da função, altera e retorna ele. for(cont = 0; cont < 6; cont++){ vetorDeCaptcha[cont] = 48 + (rand()% 10); } for(cont = 6; cont < 12; cont++){ vetorDeCaptcha[cont] = 65 + (rand()% 26); } for(cont = 12; cont < 18; cont++){ vetorDeCaptcha[cont] = 97 + (rand()% 26); } for(cont = 0; cont < 6; cont++){ vetorDeNumeroAleatorio[cont] = rand() % 18; } for(cont = 0; cont < 6; cont++){ vetorCaptchaFinal[cont] = vetorDeCaptcha[vetorDeNumeroAleatorio[cont]]; } return vetorCaptchaFinal; } char * captchaDigitado(){ char captchaTeclado[6]; int *codigo; int cont; codigo = vetorCaptcha(); for(cont = 0; cont < 6; cont++){ printf("%c", codigo[cont]); } printf("\nPor favor, prove que você não é um robô digitando o código exibido:"); gets(captchaTeclado); return captchaTeclado; } int validar(){ do{ int cont; char*leitura; int*captchaGerado; int erro; leitura = captchaDigitado(); captchaGerado = vetorCaptcha(); //voce esta gerando dois captchas 1 na função acima, //outro aqui, tente colocar a função acima aqui... for(cont = 0; cont < 6; cont++){ if(captchaGerado[cont] != leitura[cont]){ erro++; } } if(erro == 1){ return 1; }else{ return 0; } }while(validar()); } int main() { srand(time(NULL)); setlocale(LC_ALL,"portuguese"); captchaDigitado(); return 0; }
-
Programa que fale se ano e bissexto e seus antecessores e sucessores
1freakday respondeu ao tópico de BlizzarDss em C/C#/C++
if(ano%4==0||ano%400==0&&ano%100!=0); <------- Remova esse ; -
Pelo que se pode ver pelo código, onde já temos as cartas criadas e armazenadas na struct, a função de mostrar é simples: //Mostrar as cartas void mostrarcartas() { register int i;//Loop nitro :P for(i=0;i<52;i++){//carta[52] printf("[%d] Numero: %d Naipe: %c\n",i,carta[i].num, carta[i].naipe);//mostrar numeroDaCarta, numeroNaCarta e Naipe } }//That's all folks Caso as cartas não sejam ordenadas de carta[0] a carta[52], mas por outro identificador, faça um loop que encontre os identificadores na ordem correta, ate que as 52 cartas sejam mostradas.
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