Ir ao conteúdo
  • Cadastre-se

kgin

Membro Pleno
  • Posts

    378
  • Cadastrado em

  • Última visita

Tudo que kgin postou

  1. @Um mero usuário Para você utilizar a ncurses você precisa iniciá-la primeiro dessa maneira. initscr(); /* Inicia a ncurses */ depois de iniciada você pode escrever ou pegar algo da saída padrão com as funções. /* Funções de saida */ printw(); /* Funciona igual a printf() */ addch(); addstr(); /* Funções de entrada */ scanw(); /* Funciona igual a scanf() */ getch(); getstr(); você também não precisa incluir o cabeçalho stdio.h a ncurses inclui automaticamente ele e o termios.h. Quando você utilizar uma das funções de saída (como printw()) você tem que utilizar a função refresh() refresh(); /* Atualiza as informções do terminal */ Quando o seu programa terminar você tem que chamar a função endwin() endwin(); /* Finaliza a ncurses */ Ela vai restaurar todas as cagadas que você fez com o termios.h, por isso eu não recomendo a solução do @Lucca Rodrigues porque ela mexe direto com as configurações do terminal. Um programa básico com ncurses é assim. #include <ncurses.h> int main(void) { initscr(); /* Inicia a ncurses */ printw("Ola mundo!\n"); refresh(); /* Atualiza o terminal */ getchar(); /* Espera a tecla enter */ endwin(); /* Finaliza a ncurses */ return(0); } Para compilar você utiliza a linha de comando gcc NOME_DO_ARQUIVO.c -o NOME_DO_EXECUTAVEL -Wall -lncurses para um tutorial bem mais completo e detalhado de uma olhada nesse site. https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/ Boa sorte!
  2. Sim você vai ter que usar estruturas (struct) e vetores para fazer esse algoritmo. você deveria fazer algo assim para começar #include <stdio.h> struct info_aluno { char nome[60]; int ira; int ano; }; int main(void) { struct info_aluno aluno; /* Pega as informações do aluno */ printf("Digite o nome do aluno\n"); fgets(aluno.nome, 60, stdin); printf("Digite o IRA do aluno\n"); scanf("%d%*c", &aluno.ira); printf("Digite o ano de inicio da graduacao\n"); scanf("%d%*c", &aluno.ano); /* Mostra as informações do aluno */ printf("Nome do aluno:%s", aluno.nome); printf("IRA:%d\n", aluno.ira); printf("Ano:%d\n", aluno.ano); getchar(); /* Pausa o programa */ return(0); }
  3. @TsunaY Mas assim fica meio difícil de ajudar, você já escreveu alguma coisa?
  4. @TsunaY Qual seria a sua duvida? índice de rendimento acadêmico (IRA).
  5. ctype trabalha com caracteres, faz conversões de maiúscula para minuscula (e vice versa), checa se um caractere e um numero ou um gráfico (caracteres gráficos !,@,°,E,...). já o unistd está aí só para dar um delay com a função usleep (eu poderia ter usado sleep() também).
  6. Uma alternativa se você utilizar linux seria a ncurses. exemplo #include <ncurses.h> #include <ctype.h> #include <unistd.h> struct vetor2 { int x, y; }; int main(void) { int tecla; struct vetor2 vetor = {1, 1}; initscr(); /* inicia a ncurses */ noecho(); /* Não deixa o caractere pressionado aparecer */ cbreak(); /* Não espera que seja pressionado enter */ do { clear(); /* Apaga a tela */ printw("Utilize as teclas WASD para se mover, e X para sair\n"); tecla = getch(); /* pega uma tecla */ switch (toupper(tecla)) { case 'A': if (vetor.x > 0) { vetor.x--; } else { vetor.x = 79; } break; case 'D': if (vetor.x < 79) { vetor.x++; } else { vetor.x = 0; } break; case 'W': if (vetor.y > 0) { vetor.y--; } else { vetor.y = 20; } break; case 'S': if (vetor.y < 20) { vetor.y++; } else { vetor.y = 0; } break; } move(vetor.y, vetor.x); printw("#"); refresh(); /* Atualiza a tela */ usleep(50000); /* Faz uma pausa de 50 msec */ } while (toupper(tecla) != 'X'); endwin(); /* finaliza a ncurses */ return(0); } para ver o funcionamento do programa. https://onlinegdb.com/m-r5HCBGB
  7. kgin

    C excluir item de arquivo.txt

    Não seria melhor você deixar a função de cadastrar só para cadastrar? Dessa maneira. #include <stdio.h> #include <stdlib.h> struct dados_produto { int id; int quantidade; float preco; }; void salvarCadastro(struct dados_produto *produto); int cadastraProduto(struct dados_produto *produto); int main(void) { struct dados_produto produto; if (cadastraProduto(&produto)) { char opcao; printf("id:%d\n", produto.id); printf("quantidade:%d\n", produto.quantidade); printf("preco:%.2f\n", produto.preco); printf("Salvar cadastro no arquivo\n"); printf("S\\N\n"); scanf("%c%*c", &opcao); if (opcao == 'S' || opcao == 's') { salvarCadastro(&produto); printf("Cadastro salvo no arquivo\n"); } } else { printf("Cadastro descartado\n"); } getchar(); return(0); } void salvarCadastro(struct dados_produto *produto) { int contador; char buffer[256]; FILE *arq = fopen("Cadastros.csv", "r+"); if (arq == NULL) { arq = fopen("Cadastros.csv", "w+"); if (arq == NULL) { perror("Nao foi possivel de criar ou ler o arquivo"); exit(EXIT_FAILURE); } } /* Pula todos os cadastros */ do { fgets(buffer, 256, arq); } while (!feof(arq)); /* Salva o cadastro */ fprintf(arq, "%d,%d,%.2f\n", produto->id, produto->quantidade, produto->preco); fflush(arq); fclose(arq); } int cadastraProduto(struct dados_produto *produto) { struct dados_produto tmp; char opcao; do { printf("Digite o id do produto\n"); scanf("%d%*c", &tmp.id); printf("Digite a quantidade de produtos\n"); scanf("%d%*c", &tmp.quantidade); printf("Digite o preco do produto\n"); scanf("%f%*c", &tmp.preco); printf("O cadastro esta correto\n"); printf("S\\N\n"); scanf("%c%*c", &opcao); if (opcao == 'S' || opcao == 's') { *produto = tmp; printf("Cadastro feito com sucesso!\n"); return(1); } printf("Cadastrar novamente?\n"); printf("S\\N\n"); scanf("%c%*c", &opcao); } while (opcao == 'S' || opcao == 's'); return(0); } Assim fica mais simples para remover um cadastro depois.
  8. kgin

    C Usando headers em C

    Tudo que você coloca no header (.h) em c vai ser visível quando você incluir em outro arquivo, então sim você colocar suas estruturas e declarações de funções e variáveis no .h se você quiser que seja visível.
  9. @RenanDias92 Mas os valores tem que ser gerados aleatoriamente ou o programa poderia aceitar que o usuário digitasse qualquer numero menos os números anteriores? Você já fez alguma coisa?
  10. kgin

    C Jogo estilo quiz em C

    Eu fiz esse jogo a um tempo atrás, mas não terminei. Eu acho que talvez pode ser útil para alguém que esteja começando. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> const char *N_ARQ_BANNER = "banner.txt"; const char *N_ARQ_PERGUNTAS = "perguntas.csv"; #define T_PERGUNTA 512 #define Q_ALTERNATIVAS 4 #define T_ALTERNATIVAS 256 #define T_NOME 256 #define T_DICA 256 #define T_BUFFER 256 #define MILHOS_PERGUNTA 100 struct infor_pegunta { char pergunta[T_PERGUNTA]; char alternativas[Q_ALTERNATIVAS][T_ALTERNATIVAS]; char dica[T_DICA]; int alternativa_correta; }; struct dados_jogador { char nome[T_NOME]; unsigned char dicas_restantes; unsigned int pontuacao; }; void mostraBanner(void); void mostraLinha(void); int fazPergunta(struct infor_pegunta *pergunta, struct dados_jogador *jogador); int main(void) { struct infor_pegunta pergunta; struct dados_jogador jogador; char buffer[T_BUFFER]; unsigned short q_perguntas = 0, *local_perguntas = NULL; int indice_perguntas = 0; int contador, errou; FILE *arq = fopen(N_ARQ_PERGUNTAS, "r"); if (arq == NULL) { printf("O programa necessita do arquivo %s para iniciar!\n", N_ARQ_PERGUNTAS); perror("Arquivo nao encontrado"); goto finaliza; } /* Conta quantas perguntas existem no arquivo */ do { if (fgets(buffer, T_BUFFER, arq) != NULL) { q_perguntas++; } } while (!feof(arq)); if (q_perguntas == 0) { printf("O arquivo %s esta corrompido!\n", N_ARQ_PERGUNTAS); goto finaliza; } /* Inicia o local das perguntas */ local_perguntas = malloc(sizeof(*local_perguntas)*q_perguntas); if (local_perguntas == NULL) { goto finaliza; } for (contador = 0; contador < q_perguntas; contador++) { local_perguntas[contador] = contador; } srand(time(NULL)); for (contador = 0; contador < q_perguntas; contador++) { int indice = rand()%q_perguntas, tmp = local_perguntas[contador]; local_perguntas[contador] = local_perguntas[indice]; local_perguntas[indice] = tmp; } jogador.pontuacao = 0; jogador.dicas_restantes = 3; mostraBanner(); /* Pega o nome do jogador */ do { contador = 1; printf("Digite o seu nome\n"); if (fgets(buffer, T_BUFFER, stdin)!= NULL) { if (buffer[0] != '\n') { contador = 0; strcpy(jogador.nome, buffer); } else { printf("Digite alguma coisa!\n"); } } } while (contador); /* Começa o jogo */ errou = 1; do { char *posicao; /* Pega uma pergunta do arquivo */ rewind(arq); for (contador = 0; contador < local_perguntas[indice_perguntas]; contador++) { fgets(buffer, T_BUFFER, arq); } fgets(buffer, T_BUFFER, arq); posicao = strtok(buffer, ","); strcpy(pergunta.pergunta, posicao); for (contador = 0; contador < Q_ALTERNATIVAS; contador++) { posicao = strtok(NULL, ","); strcpy(pergunta.alternativas[contador], posicao); } posicao = strtok(NULL, ","); sscanf(posicao, "%d", &pergunta.alternativa_correta); posicao = strtok(NULL, ","); strcpy(pergunta.dica, posicao); if (fazPergunta(&pergunta, &jogador) == pergunta.alternativa_correta) { printf("Parabens voce ganhou mais %d milhos\n", MILHOS_PERGUNTA); jogador.pontuacao += MILHOS_PERGUNTA; } else { printf("Que pena você errou!\n"); errou = 0; } indice_perguntas++; } while (indice_perguntas < q_perguntas && errou); if (indice_perguntas == q_perguntas) printf("Parabens voce ganhou!\n"); else printf("Que pena, mais sorte da proxima vez!\n"); getchar(); finaliza: if (local_perguntas != NULL) free(local_perguntas); if (arq != NULL) fclose(arq); return(0); } void mostraBanner(void) { char buffer[T_BUFFER]; FILE *arq = fopen(N_ARQ_BANNER, "r"); if (arq != NULL) { do { if (fgets(buffer, T_BUFFER, arq) != NULL) { printf("%s",buffer); } } while (!feof(arq)); putchar('\n'); fclose(arq); } else { printf("\t\tShow do milho!\n"); } } void mostraLinha(void) { int contador; for (contador = 0; contador < 80; contador++) { putchar('-'); } putchar('\n'); } int fazPergunta(struct infor_pegunta *pergunta, struct dados_jogador *jogador) { unsigned char contador; int alternativa = 0, dica_usada = 0; mostraLinha(); printf("\tPergunta!\n%s\n", pergunta->pergunta); for (contador = 0; contador < Q_ALTERNATIVAS; contador++) { printf("\t%d-%s\n", contador+1, pergunta->alternativas[contador]); } if (jogador->dicas_restantes > 0) { printf("Suas dicas restantes:\t%d\n", jogador->dicas_restantes); printf("Para utilizar as dicas pressione %d\n", Q_ALTERNATIVAS+1); } else { printf("voce nao possui dicas para utilizar\n"); } printf("Seus milhoes:%d\n", jogador->pontuacao); mostraLinha(); do { printf("Escolha uma alternativa %s\n", jogador->nome); char buffer[T_BUFFER]; if (fgets(buffer, T_BUFFER, stdin) != NULL) { if (sscanf(buffer, "%d", &alternativa) == 1) { if (alternativa > 0 && alternativa <= Q_ALTERNATIVAS) { return(alternativa); } else if (alternativa == Q_ALTERNATIVAS+1 && jogador->dicas_restantes > 0) { if (jogador->dicas_restantes > 0 && dica_usada != 1) { printf("Dica\n%s\n", pergunta->dica); dica_usada++; } } } } } while (alternativa < 1 || alternativa > Q_ALTERNATIVAS); return(0); } Arquivo de perguntas. perguntas.csv Arquivo de banner(não é necessário). banner.txt Arquivo executável(compatibilidade WinXp/10, LinuxV4.XX, MacOs e Demônio(BSD)). main.zip
  11. kgin

    C++ erro no codigo c++

    Olha aqui no meu compilador Que está basicamente dizendo que na linha 189 do arquivo calc.cpp while(value > 0) convert(value % 10, digits, (*count)++); value = value / 10; } Seu while está sem a chave do bloco '{' e que na linha 123 do mesmo arquivo (calc.cpp) você está utilizando uma variável chamada digit no loop for que não foi declarada for(digit = 0; digit < 8; digit++){ numeros[x] = num % 10; num /= 10; } e que a sua função void CpuSthefani::converterIntToDigits(int value, Digit *digits, int *count) você não fechou o bloco da função com a chave '}'
  12. kgin

    C++ erro no codigo c++

    @souza souza00 Pra mim esse seu código não tem salvação, mas se vocẽ ainda quiser tentar recuperar a maior parte dos erros estão no método void CpuSthefani::converterIntToDigits(int value, Digit *digits, int *count) na linha 118 do arquivo calc.cpp. Você não fechou o método com a chave } nem utilizou um bloco {} no while, e no for você está utilizando um ponteiro para contar deveria se uma variável do tipo inteira (int). Eu fiz um código demonstrado um display em C (avisando novamente eu não sei C++) talvez seja útil. #include <stdio.h> #include <stdlib.h> /* Informações internas do display */ /* Seria os campos privados do objeto */ struct info_display { int max_buffer; char *buffer; }; /* Metodos do objeto */ void limpaDisplay(struct info_display *display); /* * Limpa todos os caracteres no display */ void iniciaDisplay(struct info_display *display, int max_caracteres); /* * Inicia o display com a quantidade de caracteres suportados */ void atualizaDisplay(struct info_display *display); /* * Mostra o display para o usuario */ void adicionaCaractereDisplay(struct info_display *display, char caractere); /* * Coloca caracteres no display */ void apagaUltimoCaractereDisplay(struct info_display *display); /* * Remove o ultimo caractere adicionado no display */ void liberaDisplay(struct info_display *display); /* * Apaga a memoria reservada para o display */ int main(void) { struct info_display display; iniciaDisplay(&display, 10); printf("Primeira atualizacao\n"); adicionaCaractereDisplay(&display, '1'); adicionaCaractereDisplay(&display, '3'); adicionaCaractereDisplay(&display, '7'); atualizaDisplay(&display); printf("Segunda atualizacao\n"); apagaUltimoCaractereDisplay(&display); adicionaCaractereDisplay(&display, 'C'); atualizaDisplay(&display); printf("Terceira atualizacao\n"); limpaDisplay(&display); atualizaDisplay(&display); liberaDisplay(&display); return(0); } void limpaDisplay(struct info_display *display) { int contador = 0; for (contador = 0; contador < display->max_buffer; contador++) { display->buffer[contador] = '\0'; } } void iniciaDisplay(struct info_display *display, int max_caracteres) { /* Reserva a quantidade caracteres maxíma do display */ display->buffer = malloc(sizeof(*display->buffer)*display->max_buffer); /* Se foi possivel reservar memoria então limpa o display */ if (display->buffer != NULL) { display->max_buffer = max_caracteres; limpaDisplay(display); } else { display->buffer = NULL; } } void atualizaDisplay(struct info_display *display) { int contador; /* Mostra uma linha */ for (contador = 0; contador < display->max_buffer; contador++) { putchar('-'); } putchar('\n'); /* Mostra o conteudo do display */ printf("%s\n",display->buffer); /* Mostra uma linha */ for (contador = 0; contador < display->max_buffer; contador++) { putchar('-'); } putchar('\n'); } void adicionaCaractereDisplay(struct info_display *display, char caractere) { int contador; for (contador = 0; contador < display->max_buffer-1 && display->buffer[contador]; contador++); if (contador < display->max_buffer-1) { display->buffer[contador] = caractere; display->buffer[contador+1] = '\0'; } } void apagaUltimoCaractereDisplay(struct info_display *display) { int contador; for (contador = 0; display->buffer[contador]; contador++); if (contador > 0) { display->buffer[contador-1] = '\0'; } else { display->buffer[contador] = '\0'; } } void liberaDisplay(struct info_display *display) { if (display->buffer != NULL) { free(display->buffer); } } Defina o que cada objeto em seu programa faz, e coloque cada um para fazer a sua tarefa com perfeição.
  13. kgin

    C++ erro no codigo c++

    você pode postar no replit ou no onlineGDB que fica mais cômodo para as pessoas visualizarem, Agora vamos ao código eu não sei C++, mas eu acho que essa calculadora está com muitos objetos para uma calculadora. Você já parou para pensar o que o objeto Cpu faz? esse objeto está fazendo serviço de outros como virtual void setDisplay(Display * display) = 0; Isso não deveria estar em Display? qual é o sentido de display ser configurado por outro objeto? É aqui nesse trecho virtual void setDecimalSeparator() = 0; Pra que ter isso sendo que você poderia ter algo como void addCharacterToDisplay(const character char); void removeLastCharacterDisplay();
  14. Eu sei que é, mas tudo que eu vejo os outros postarem parece que vem do C++. Acabei inventando palavra. seria criar uma sinônimo ou alias, porque você acabou de criar uma estrutura pra que dar um nome que foge do escopo do proposito do mesmo?
  15. Eu não sei se isso e alguma coisa do C++ ou porque eu ainda penso muito em pascal, mas pra mim não faz sentido tipificar uma estrutura. typedef struct{ int codigo; char descricao[50]; char fornecedor[50]; int quantidade; float preco_venda; float preco_compra; }Produto; Isso pra mim parece que meio que "oculta" o tipo, sendo que namespace de estruturas já são distintos de outros tipos de declaração em C. outra coisa que eu acho estranho e fazer um cast quando está passando endereços(Ponteiros do tipo void) para ponteiros, o cast já não é automático? Ou em C++ e diferente? prod = (Produto *)malloc(sizeof(Produto) * n); Não seria melhor fazer assim? prod = malloc(sizeof(*prod)*n); Bem mais simples é claro.
  16. kgin

    C++ Projeto de faculdade - QUIZ

    Não seria melhor você postar o código? Assim fica meio difícil de ajudar.
  17. kgin

    C média das notas c vetor

    você teria que somar as notas dessa maneira. /* Soma todas as notas */ for (contador = 0; contador < 10; contador++) { soma = soma+notas[contador]; } troque a variável contador pela a variável que você estiver usando. Depois e só dividir pela quantidade de notas. /* Tira a media */ media = soma/10; e mostrar /* Mostra a media nota */ printf("a media e:%.2f", media); tudo isso vai depois dessa linha Apague o resto até o return()
  18. Se o seu sistema operacional estiver configurado para português e só você usar a função setlocale. Exemplo setlocale(LC_ALL, ""); Vai configurar o programa para aceitar a região atual do sistema. É o seu programa está muito mal organizado, e eu acho que está saindo fora do enunciado. Aqui está pedindo para fazer uma função que sirva como menu. Você escreveu o menu direto na função main() eu acho que está errado. Eu recomendo você começar de novo! Um exemplo inicial de como seria o programa seguindo o enunciado. Exemplo no replit
  19. Eu já vi essa mesma questão varias vezes aqui no fórum, então eu acho que a chance de alguém copiar logo o seu é baixa.
  20. @AsafeBernardoOficial Você ainda está inicializando o vetor de uma forma que só e valida em C++. Coloque um 0 entre as chaves para ser valido em C. O vetor total_itens[] não tem posições validas. Eu recomendo você começar de novo. Eu fiz um exemplo mas eu acho que ficou muito extenso para postar no fórum, então eu vou deixar no replit. https://replit.com/@KGin/SandwichStore#main.c
  21. Lembrei de alguns anos atrás que eu ligava esses monitores lcd na porta paralela do computador para mostrar algumas informações inúteis e alguns desenhos. Desse jeito.
  22. kgin

    C Jogo da memoria simples

    Não poderia ser ao invés de gerar essa sequencia aleatória você já tivesse um vetor com a sequencia de 1 a 9 depois e só embaralhar o vetor. Exemplo. O programa está rodando na janela de baixo, Eu não tinha nada para recordar a imagem O programa mostra um vetor de 1 a 9 embaralhado, depois pede a jogado do jogador, e por fim comparar quantos números o jogador acertou. Código do exemplo. #include <stdio.h> #include <stdlib.h> #include <time.h> #define Q_NUMEROS 9 int main(void) { int numeros[Q_NUMEROS], jogador[Q_NUMEROS], maquina[Q_NUMEROS]; int contador, quantidade = 0; /* Inicia os vetores */ for (contador = 0; contador < Q_NUMEROS; contador++) { numeros[contador] = contador+1; jogador[contador] = maquina[contador] = 0; } /* Gera os numeros do jogo */ srand(time(NULL)); for (contador = 0; contador < Q_NUMEROS; contador++) { /* Troca os numeros de posição no vetor */ int indice = rand()%Q_NUMEROS, tmp = numeros[contador]; numeros[contador] = numeros[indice]; numeros[indice] = tmp; } /* Mostra o vetor */ printf("Memorize os numeros!\n"); for (contador = 0; contador < Q_NUMEROS; contador++) { printf("%i\n", numeros[contador]); } /* Coloque alguma coisa para fazer um atraso e apague a tela */ /* Pega os numeros do jogador */ printf("Digite a sequecia anterior\n"); for (contador = 0; contador < Q_NUMEROS; contador++) { scanf("%i%*c", &jogador[contador]); } /* Conta a quantidade de acertos */ for (contador = 0; contador < Q_NUMEROS; contador++) { if (numeros[contador] == jogador[contador]) { quantidade++; } } if (quantidade == Q_NUMEROS) { printf("voce ganhou!\nAcertou todos os numeros\n"); } else { printf("voce perdeu!\nVoce acertou %i numeros\n", quantidade); } getchar(); return(0); } Quando for postar o seu código fonte no fórum use o botão code <>, porque quase ninguém vai querer ajudar com o código assim.
  23. kgin

    C# Estou tentando fazer um macro

    @luarxx Isso envolve o próprio sistema de anti-cheat do jogo também, a maioria dos jogos de tiro (como COD, CS) tem sistemas anti-cheat para esse tipo de programa ou script. Seria algo inútil se você não burlasse o sistema de anti-cheat do próprio jogo primeiro, que é uma coisa que eu suponho que você não consegue fazer. Recomendo você usar aquela estrategia das antigas, compre um mouse com o DPI alto e aprenda a jogar!
  24. Bah, tchê eu acho que dessa vez não deu! kkkkk
  25. Creio eu que na sua época eletrônica digital não era uma coisa tão acessível kkkk. @Diegolv Na minha opinião a parte mais difícil não é montar o hardware para isso, é sim programar o jogo em si. Jogos como o super mario world tem mecânicas complicadas de reproduzir, como a distancia entre os inimigos e as colisões entre os objetos. Eu recomendo você aprender a programar alguns jogos pequenos primeiro em uma maquina mais potente para só depois tentar entrar de cabeça nessa empreitada.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!