Ir ao conteúdo
  • Cadastre-se

KXSY

Membro Pleno
  • Posts

    559
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de KXSY em Arduino - Programando Mouse e Buzzer foi marcado como solução   
    @DjSheepWolfBR Não sei se isso te ajuda mais confere esse video
    https://youtu.be/HwW2CMp5DS0
  2. O post de KXSY em Como armazenar numeros corretamente em um arquivo txt foi marcado como solução   
    Há muitas coisas erradas no seu código, como isso aqui
    não vai fazer o que você pretende, isso só vai pegar um numero de até 10 casas decimais.
     
    Eu não vou apontar todos os seus erros, ao invés disso vou deixar um exemplo funcionando.
    #include <stdio.h> #include <stdlib.h> /* Constantes */ #define N_ARQ "cadastros.txt" #define T_NOME 30 #define T_CPF 10 #define T_TELEFONE 15 /* Definições */ struct dados_paciente { char nome[T_NOME]; unsigned char idade; char sexo; /* Oh yeah! */ char cpf[T_CPF]; char telefone[T_TELEFONE]; }; int main(void) { struct dados_paciente paciente; /* Cria o arquivo */ FILE *arq = fopen(N_ARQ, "w+"); if (arq == NULL) { /* Erro */ perror("Não foi possível cria o arquivo!"); exit(EXIT_FAILURE); } /* Pede as informaçẽos do paciente */ printf("\nDigite o nome do paciente:\t"); fgets(paciente.nome, T_NOME, stdin); printf("\nDigite a idade do paciente:\t"); scanf("%hhu%*c", &paciente.idade); printf("\nDigite o sexo do paciente:\t"); scanf("%c%*c", &paciente.sexo); printf("\nDigite o CPF do paciente:\t"); fgets(paciente.cpf, T_CPF, stdin); printf("\nDigite o numero de telefone do paciente:\t"); fgets(paciente.telefone, T_TELEFONE, stdin); /* Grava as informaçẽos no arquivo */ fprintf(arq, "Nome:%s", paciente.nome); fprintf(arq, "Idade:%hhu\n", paciente.idade); fprintf(arq, "Sexo:%c\n", paciente.sexo); fprintf(arq, "CPF:%s", paciente.cpf); fprintf(arq, "Telefone:%s", paciente.telefone); /* Fecha o arquivo */ return(0); } De uma olhada no exemplo, qualquer duvida e só perguntar.
  3. O post de KXSY em Comparar valor digitado com valor contido em arquivo txt C foi marcado como solução   
    foi mal, acabei passando a versão de backup ao invés da que já estava pronta.
     
    Aqui de novo.
    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> /* Constantes */ #define T_NOME 30 #define T_SENHA 15 const char *N_ARQ = {"logins.txt"}; /* Definições */ struct login_info { char nome[T_NOME]; char senha[T_SENHA]; }; int main(void) { FILE *arq; struct login_info login, usr; /* Abre o arquivo */ arq = fopen(N_ARQ, "r+"); /* Verifica ase o arquivo existe */ if (arq == NULL) { char str[250]; /* Cria o arquivo */ arq = fopen(N_ARQ, "w+"); /* Checa se foi possível criar o arqivo */ if (arq == NULL) { perror("Nao foi possivel criar o arquivo."); exit(EXIT_FAILURE); } /* Pede nome e senha para gravar no arquivo */ printf("\nCadastro de usuario.\n"); do { printf("\nDigite o nome de usuario:\t"); fgets(str, 250, stdin); if (strlen(str) > T_NOME) { printf("\nNome de usuario muito grande!"); printf("\nDigite um nome com ate %i caracteres.", T_NOME); printf("\nPressine enter para continuar."); getchar(); } else { strcpy(login.nome, str); } } while (strlen(str) > T_NOME); do { printf("\nDigite a senha de usuario:\t"); fgets(str, 250, stdin); if (strlen(str) > T_SENHA) { printf("\nSenha de usuario muito grande!"); printf("\nDigite uma senha com ate %i caracteres.", T_SENHA); printf("\nPressine enter para continuar."); getchar(); } else { strcpy(login.senha, str); } } while (strlen(str) > T_SENHA); /* Grava o nome e a senha no arquivo. */ fprintf(arq, "%s", login.nome); fprintf(arq, "%s", login.senha); fflush(arq); /* Grava o buffer do arquivo. */ rewind(arq); /* Posiciona o arquivo na primeira entrada */ } /* Lê as informações do login */ fgets(login.nome, T_NOME, arq); fgets(login.senha, T_SENHA, arq); /* Apaga o espaço em braco no final da string. */ login.nome[strlen(login.nome)-1] = '\n'; login.senha[strlen(login.senha)-1] = '\n'; /* Pede usuraio e senha */ do { char str[250]; printf("\nLogin de usuario\n"); do { printf("\nDigite o nome de usuario:\t"); fgets(str, 250, stdin); if (strlen(str) > T_NOME) { printf("\nNome de usuario muito grande!"); printf("\nDigite um nome com ate %i caracteres.", T_NOME); printf("\nPressine enter para continuar."); getchar(); } else { strcpy(usr.nome, str); } } while (strlen(str) > T_NOME); do { printf("\nDigite a senha de usuario:\t"); fgets(str, 250, stdin); if (strlen(str) > T_SENHA) { printf("\nSenha de usuario muito grande!"); printf("\nDigite uma senha com ate %i caracteres.", T_SENHA); printf("\nPressine enter para continuar."); getchar(); } else { strcpy(usr.senha, str); } } while (strlen(str) > T_SENHA); if (!(strcmp(login.nome, usr.nome) == 0 && strcmp(login.senha, usr.senha) == 0)) { printf("\nUsurio ou senha invalidos.\n"); printf("\nPressione enter para continuar.\n"); getchar(); } } while (!(strcmp(login.nome, usr.nome) == 0 && strcmp(login.senha, usr.senha) == 0)); printf("\nUsurio logado.\n"); printf("\nPressione enter para continuar.\n"); getchar(); fclose(arq); return(0); } Eu esqueci de verifica o retorno de strcmp() se era igual a zero (se fosse igual a zero quer dize que as strings são iguais).
     
    ao invés de gravar o arquivo em texto, eu recomendo você gravar o arquivo em binário. não vai ficar pratico para ler, mas será bem melhor para o programa.
  4. O post de KXSY em Aviso memoria não inicializada e erro no programa foi marcado como solução   
    O seu algorítimo está correto, o único erro e que você esqueceu de colocar o break nesse case aqui.
     
    é para ficar compatível com C você teria que colocar as declarações na primeira linha do main assim.
    #include<stdio.h> #include<stdlib.h> int main() { int j1, j2, vitoria; printf("Pokenpo\n"); printf("1 - Bulbassauro\n"); printf("2 - Charmander\n"); printf("3 - Squirtle\n"); printf("Jogador 1: "); scanf("%d", &j1); printf("Jogador 2: "); scanf("%d", &j2); switch (j1) { case 1://bulbassauro switch (j2) { case 1://bulbassauro vitoria = 0; break; case 2://charmander vitoria = 2; break; case 3://squirtle vitoria = 1; break; } break; case 2://charmander switch (j2) { case 1://bulbassauro vitoria = 2; break; case 2://charmander vitoria = 0; break; case 3://squirtle vitoria = 3; break; } break; case 3://squirtle switch (j2) { case 1://bulbassauro vitoria = 1; break; case 2://charmander vitoria = 3; break; case 3://squirtle vitoria = 0; break; } break; } switch (vitoria) { case 0: printf("Os dois pokemon desmaiaram"); break; case 1://bulbassauro printf("Bulbassauro metralhou squirtle"); break; case 2://charmander printf("Charmander queimou bulbassauro"); break; case 3://squirtle printf("Squirtle afogou charmander"); break; } return 0; }  
  5. O post de KXSY em Como colocar cor no Texto. foi marcado como solução   
    você pode fazer assim
    ou assim
    #include <stdio.h> #include <conio.h> int main () { float n1,n2,media; printf ("Digite a primeira nota:"); scanf ("%f",&n1); printf ("Digite a segunda nota:"); scanf ("%f",&n2); media = (n1+n2)/2; if (media>=7) { textcolor(BLUE); cprintf ("APROVADO"); } else { if (media <3) { textcolor(RED); cprintf ("REPROVADO"); } else { if (media >=3) { textcolor(YELLOW); printf ("RECUPERACAO"); } } } } se o seu devc++ for velho o suficiente eu acho que vai funcionar, se não tente isso windows escape sequences
  6. O post de KXSY em Vetor de Struct dando Segmentation fault foi marcado como solução   
    sim. mas preste atenção no vetor ele vai 0...6 então ele tem 7 posições, mas quando você declarou tirou uma  posição então ele vai de 0...5 quer dizer que ele tem 6 posições e você está lendo os dados como se tivesse 7.
     
    o for vai se repetir por 6 vezes fazendo assim o scanf gravar dados em uma área de memoria não reservada.
     
    Se você estiver usando um teclado físico recomendo usar esse site repl.it.
    adicionado 11 minutos depois Eu consertei o seu programa dessa vez e coloquei um exemplo de como usar o vetor.
    //Faça um programa que receba a idade e o peso de 7 pessoas . Calcule e mostre: A quantidade de pessoas com mais de 90 quilos; A média das idades das sete pessoas. #include <stdio.h> #define num_pessoas 7 typedef struct { int idade; float peso; }pesso_t; int main(void) { pesso_t pessoas[num_pessoas]; int i, quant_acima90 = 0, soma = 0; float media; for (i = 0; i < num_pessoas; i++) { printf ("Informe a idade da %d° pessoa: ", i+1); scanf ("%d", &pessoas[i].idade); printf ("Informe o peso da %d° pessoa: ", i+1); scanf ("%f", &pessoas[i].peso); printf ("\n"); soma += pessoas[i].idade; if (pessoas[i].peso > 90) { quant_acima90 ++; } } media = soma/num_pessoas; printf ("%d pessoas estão acima de 90Kg.", quant_acima90); printf("\nIdade e peso das pessoas que estão acima de 90Kg."); for(i=0; i<num_pessoas; i++) { if(pessoas[i].peso>90) { printf("\nIdade:\t%i",pessoas[i].idade); printf("\nPeso:\t%2.f",pessoas[i].peso); } } printf ("\nA media das idades das pessoas e: %.2f", media); getchar(); /* Pausa */ return (0); }  
  7. O post de KXSY em Como colocar duas frases com aspas no Printf foi marcado como solução   
    Me confundi com algo que eu estava lendo aqui, mas para mostrar a variável resultado seria assim
    #include <stdio.h> int main(void) { int resultado=321; printf(" Você tem %d de limite disponível",resultado); return 0; } esse tipo de estrutura só é aceito em pascal ou visulG.
     
    a forma correta em C e: printf("string",variaveis);
    string pode ser qualquer coisa ou um identificador para ser trocado o valor com uma variável.
    exemplo:
    int var=32; printf("%d",var); printf("\nQualquer coisa"); lista de identificadores para passar valores em printf e para pegar valores em scanf.
    "%d" Decimal qualquer.
    "%f" Ponto flutuante (números com virgula ou números reais se preferir).
    "%c" caractere (Só um caractere. ex:'C').
    "%s" string (Uma sequencia de caracteres, mais conhecido como vetor).
     
    tem muito mais, mas esses são os mais importantes.
    procure baixar o livro C completo e total nele tem explicações mais detalhadas.
  8. O post de KXSY em Vetor de 10 números aleatórios foi marcado como solução   
    Não sei se vai ficar muito claro para você, mas confere ai.
    #include <stdio.h> #include <stdlib.h> #include <time.h> /* Constantes */ #define T_VETOR 10 #define MAX 100 int main(void) { int vetor[T_VETOR],cont,posicao=0,aux; /* Inicia o gerador de numeros */ srand(time(NULL)); /* Coloca 10 numeros no vetor */ for(cont=0; cont<T_VETOR; cont++) vetor[cont]=rand()%MAX; /* Mostra o vetor */ for(cont=0; cont<T_VETOR; cont++) printf("\n%i",vetor[cont]); printf("\n"); /* Salta uma linha */ /* Busca o maior valor */ for(cont=0; cont<T_VETOR; cont++) if(vetor[posicao]<vetor[cont]) posicao=cont; /* Troca os valores de posição */ aux=vetor[T_VETOR-1]; vetor[T_VETOR-1]=vetor[posicao]; vetor[posicao]=aux; /* Mostra o vetor */ for(cont=0; cont<T_VETOR; cont++) printf("\n%i",vetor[cont]); printf("\n"); /* Salta uma linha */ getchar(); /* Pausa o programa */ return(0); } Esse algorítimo tem algumas redundâncias, mas foi feito propositalmente para ficar mais fácil de entender.
  9. O post de KXSY em Conversor de caracteres em C foi marcado como solução   
    @Marckya O modo mais simples seria converter na saída.
     
    exemplo
    #include <stdio.h> #include <ctype.h> #define T_VETOR 10 int main(void) { char v[T_VETOR],d; printf("\nDigite uma palavra:\t"); scanf("%s",v); printf("\n"); for(d=0; v[d]; d++) switch(toupper(v[d])) { case 'C': printf("3"); break; case 'F': printf("6"); break; case 'I': printf("9"); break; case 'L': printf("12"); break; case 'O': printf("15"); break; case 'R': printf("18"); break; case 'U': printf("21"); break; case 'X': printf("24"); break; default: printf("%c",v[d]); } printf("\n"); getchar(); } Outra maneira seria criar um tipo especifico para armazenar letras e números.
  10. O post de KXSY em Debian 10 - problemas com firmware, wifi não funciona foi marcado como solução   
    Se você já instalou e tem internet cabeada você pode fazer o seguinte.
     
    Abra o terminal e digite:sudo (aqui vai o nome do seu editor de texto, eu uso o vim) /etc/apt/sources.list
     
    Adicione a linha ao arquivo: deb http://http.debian.net/debian/ buster main contrib non-free
     
    Salve o arquivo e atualize a lista de pacotes com o seguinte comando: apt-get update
     
    instale todos os firmwares necessários: apt-get install firmware-misc-nonfree
     
    Agora se você ainda não instalou o debian e ainda tem um sistema funcionado. recomendo instalar por uma dessas isos aqui Debian-non-free que já vem todos os firmwares.
  11. O post de KXSY em Exercicio para embaralhar e distribuir cartas foi marcado como solução   
    Não entendi muito bem a logica do seu algorítimo, mas vou deixa um exemplo de como seria uma organização melhor.
    /* Gera Baralho */ #include <stdio.h> #include <stdlib.h> #include <time.h> /* Constantes */ #define Q_NIPES 4 /* Quantidade de nipes */ #define Q_CADA_NIPE 13 /* Quantidade de cada nipe */ #define Q_CARTAS (Q_NIPES*Q_CADA_NIPE) /* Quantidade de cartas no jogo */ /* Tipos */ typedef enum{PAUS,OUROS,COPAS,ESPADAS}TNipe; typedef struct { unsigned char valor; TNipe nipe; }TCarta; /* Procedimentos */ void IniciaBaralho(TCarta *c,unsigned char quant_nipes, unsigned char quant_c_nipes); void MostraBaralho(TCarta *c, unsigned char quant_cartas); void EmbaralhaBaralho(TCarta *c, unsigned char quant_cartas); int main(void) { TCarta cartas[Q_CARTAS]; int d; IniciaBaralho(cartas,Q_NIPES,Q_CADA_NIPE); printf("\nBaralho organizado."); MostraBaralho(cartas,Q_CARTAS); getchar(); /* Pausa */ EmbaralhaBaralho(cartas,Q_CARTAS); printf("\n\nBaralho embaralhado."); MostraBaralho(cartas,Q_CARTAS); getchar(); /* Pausa */ return(0); } void IniciaBaralho(TCarta *c,unsigned char quant_nipes, unsigned char quant_c_nipes) { unsigned char nipe,valor,cont=0; /* Nipes */ for(nipe=0; nipe<quant_nipes; nipe++) /* Valor das cartas */ for(valor=1; valor<=quant_c_nipes; valor++) { c[cont].valor=valor; c[cont].nipe=nipe; cont++; } } void MostraBaralho(TCarta *c, unsigned char quant_cartas) { int d; for(d=0; d<quant_cartas; d++) { /* Valor da carta */ switch(c[d].valor) { case 1: printf("\nA:"); break; case 11: printf("\nValete:"); break; case 12: printf("\nDama:"); break; case 13: printf("\nRei:"); break; default: printf("\n%hhu:",c[d].valor); } /* Nipe da carta */ switch(c[d].nipe) { case PAUS: printf("Paus"); break; case OUROS: printf("Ouros"); break; case COPAS: printf("Copas"); break; case ESPADAS: printf("Espadas"); } } } /* Procedimento interno, não visivel ao resto do programa principal. */ void Troca(TCarta *o, TCarta *d) { TCarta aux; aux=*o; *o=*d; *d=aux; } void EmbaralhaBaralho(TCarta *c, unsigned char quant_cartas) { unsigned char d; srand(time(NULL)); for(d=0; d<quant_cartas; d++) { unsigned char j; j=rand()%quant_cartas; /* Faz a troca de cartas */ Troca(&c[d],&c[j]); } }  
  12. O post de KXSY em Armazenar letras de um arquivo em uma estrutura foi marcado como solução   
    Há varias maneiras de chegar no mesmo resultado, eu vou deixar um exemplo
    #include <stdio.h> #include <stdlib.h> #include <ctype.h> /* Constantes */ #define T_MORSE 8 #define Q_LETRAS 26 #define Q_NUMEROS 10 #define Q_MORSE (Q_LETRAS+Q_NUMEROS) #define T_NOME 20 #define N_ARQUIVO "morse.txt" /* Tipos */ typedef struct { char letra; char codigo[T_MORSE]; }TCodigoMorse; int main(void) { int d; TCodigoMorse codigo[Q_MORSE]; char nome[T_NOME]; FILE *arq=fopen(N_ARQUIVO,"r+"); if(!arq) { printf("\nO arquivo não existe!"); return(-1); } /* Pega as letras */ for(d=0; d<Q_LETRAS; d++) { int l=0; char aux; /* Pega a letra do alfabeto */ codigo[d].letra=fgetc(arq); /* Ignora o espaço em branco */ fgetc(arq); /* Pega o correspondente da letra em morse */ do { aux=fgetc(arq); if(aux!='*') { codigo[d].codigo[l]=aux; l++; codigo[d].codigo[l]=0; } }while(aux!='*'); /* Pega o caractere de nova linha */ fgetc(arq); fgetc(arq); } /* Mostra */ printf("\nLetras em codigo morse\n"); for(d=0; d<Q_LETRAS; d++) printf("%c=%s ",codigo[d].letra,codigo[d].codigo); printf("\nDigite seu nome:\t"); fgets(nome,T_NOME,stdin); printf("\nSeu nome em codigo morse\n"); for(d=0; nome[d]!='\n'; d++) printf("%s",codigo[toupper(nome[d])-65].codigo); getchar(); fclose(arq); return(0); }  
  13. O post de KXSY em Problemas a bíblioteca Allegro foi marcado como solução   
    Se não sabe usar o apt direito use o synaptic, eu acabei de instalar aqui e tinha tanta dependência que você perderia 3 dias tentando resolver.

    Recomendo desinstalar pelo apt e reinstalar pelo synaptic.
     
    Boa sorte, da ultima vez que eu tentei perdi 3 horas para conseguir compilar uma janela.
     
    as bibliotecas no linux ficam em "/usr/include/" no caso do allegro você pode digitar no terminal "cd /usr/include/allegro5/" e dar um "ls -l" para ver todos os arquivos.
  14. O post de KXSY em Qual a diferença entre fgets e scanf em C? foi marcado como solução   
    Isso não é só o fgets que faz, com o scanf() também e possível.
    Exemplo
    scanf("%30[^\n]%*c",str); ^ ^ ^ ^---------String a ser pega | | |--------------Caractere de controle | |-----------------Ignora NewLine |----------------------Pega 29 caracteres Eu não lembro muito bem se assim ele ignora ou coloca o '\n' na string, os comandos printf (print formatted = impressão formatada) e scanf (scan formatted = escaneia formatada) recebem os inputs(=entrada) direto do arquivo stdin(standard input = entrada padrão) que e aberto automaticamente quando você acrescenta o header(=cabeçalho) stdio.h
     
    É o scanf() e printf() tem uma sintaxe própria podendo desde ignora caracteres especias na na entrada ou até ler somente a números ou letras.
     
    Já o fgets (abreviação de File Get String ou em português Pega string do arquivo) pega somente strings de qualquer arquivo aberto (exemplo:stdin,stderr,stdout ou qualquer outro arquivo que você tenha aberto) então é um pouco limitado, já que não pode pegar inteiros ou números de ponto flutuante (até pode mas não é pratico).
  15. O post de KXSY em Porgramaçao de uma arvore foi marcado como solução   
    Não entendi muito bem o seu algorítimo, mas você já tentou fazer algo assim?
    #include <stdio.h> #include <stdlib.h> /* Constantes */ #define T_NOME 20 /* Tipos */ typedef struct { char nome[T_NOME]; long area; long populacao; }TMunicipio; typedef struct Lista { TMunicipio municipio; struct Lista *proximo; }TLista; int main() { TMunicipio m; TLista *inicio=NULL,*ponteiro; char tecla; do { printf("\nDigite o nome do municipio:\t"); scanf("%s",m.nome); printf("\nDigite a area total do municipio:\t"); scanf(" %li",&m.area); printf("\nDigite a quantidade da populacao:\t"); scanf(" %li",&m.populacao); /* Cria a lista */ if(!inicio) /* Se inicio for igual a NULL */ { ponteiro=inicio=malloc(sizeof(TLista)); if(!inicio) return(-1); /* Erro */ inicio->proximo=NULL; inicio->municipio=m; } else { ponteiro=ponteiro->proximo=malloc(sizeof(TLista)); if(!ponteiro) return(-1); /* Erro */ ponteiro->proximo=NULL; ponteiro->municipio=m; } printf("\nDeseja cadastrar mais\nS/N:\t"); scanf(" %c",&tecla); }while(tecla!='n'); /* Mostra a lista */ ponteiro=inicio; while(ponteiro) { printf("\n\nNome do municipio:\t%s",ponteiro->municipio.nome); printf("\nTamanho do municipio em Km:\t%li",ponteiro->municipio.area); printf("\nPopulacao total da cidade:\t%li",ponteiro->municipio.populacao); ponteiro=ponteiro->proximo; } /* Apaga a lista */ ponteiro=inicio; while(ponteiro) { inicio=ponteiro->proximo; free(ponteiro); ponteiro=inicio; } return(0); }  
  16. O post de KXSY em Error: Legacy Boot of UEFI Media Dell Optyplex 330 foi marcado como solução   
    Tradução livre
  17. O post de KXSY em Verificação funcionamento correto IDE foi marcado como solução   
    @Cristina2000 Aqui está rodando legal
    Se você não tem confiança na própria maquina, recomendo usar linux com uma boa senha.
    agora na parte da ide você não deveria confiar nela, o devc++ tem muitos bugs fora que ele costuma compilar código C como sendo código C++. isso e um baita problema para um iniciante em C porque o programa simplesmente não funciona direito, uma recomendação que eu tenho e aprenda a usar o GCC e não dependa de ides, não custa nada chamar um console e usar a linha de comando fora que você deveria usar um editor como o notepad++ que e muito bom sem coisas que induzem a vícios de programação.
     
    Rode o programa no OnlineGDB
    e tire suas próprias conclusões.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!