Ir ao conteúdo
  • Cadastre-se

KXSY

Membro Pleno
  • Posts

    559
  • Cadastrado em

  • Última visita

Tudo que KXSY postou

  1. @matheusmarquex Eu acho que a minha resposta não é a solução do problema, a sua é que seria.
  2. Mostre o que você já fez para os outros te ajudarem. De uma olhada nesse tópico. jogo jokenpo.
  3. 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. Faça algo mais simples primeiro, tente gravar algo no arquivo e depois pegar de volta. Um exemplo de sistema de login básico baseado em arquivo. #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)-2] = '\n'; login.senha[strlen(login.senha)-2] = '\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) && strcmp(login.senha, usr.senha))) { printf("\nUsurio ou senha invalidos.\n"); printf("\nPressione enter para continuar.\n"); getchar(); } } while (!(strcmp(login.nome, usr.nome) && strcmp(login.senha, usr.senha))); printf("\nUsurio logado.\n"); printf("\nPressione enter para continuar.\n"); getchar(); fclose(arq); return(0); } Execute o código e verifique como ele funciona.
  5. No outro tópico eu recomendei você começar de novo, mas você tem que aprender primeiro como os comandos básicos funcionam. Foque em só uma coisa de cada vez, tente resolver a parte de login do usuário, que ao meu ver e o mais simples. Aqui um exemplo de como lidar com arquivos (não sei se está correto, fiz já faz um tempo).
  6. @GeovaneAvilla Recomendo você tentar entender o problema primeiro para só depois tentar uma solução. você pode tentar começar pegando as informações do paciente. Exemplo #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <time.h> /* Constantes */ #define T_ESTADO 10 #define T_CIDADE 30 #define T_RUA 25 #define T_CEP 10 #define T_NOME 40 #define T_TELEFONE 15 #define T_DIAGNOSTICO 500 #define T_PROBLEMA 500 #define STR_MAX 250 /* Definições */ struct info_data { unsigned char dia, mes; unsigned short ano; }; struct info_endereco { char estado[T_ESTADO]; char cidade[T_CIDADE]; char rua[T_RUA]; char cep[T_CEP]; unsigned short casa; unsigned short quadra; }; struct dados_paciente { char nome[T_NOME]; unsigned char idade; struct info_data data; struct info_endereco endereco; char telefone[T_TELEFONE]; char diagnostico[T_DIAGNOSTICO]; char problema[T_PROBLEMA]; }; void pressEnter(void); void erroMsg(char *m); void mostraInfoPaciente(struct dados_paciente *p); int pegaInfoPaciente(struct dados_paciente *p); int main(void) { struct dados_paciente paciente; if (pegaInfoPaciente(&paciente)) { printf("\nCadastro incompleto!\n"); printf("tchau!"); pressEnter(); return(0); } else { printf("\nOs dados do paciente.\n"); mostraInfoPaciente(&paciente); } pressEnter(); return(0); } void pressEnter(void) { printf("\nPressione enter para continuar..."); getchar(); } void erroMsg(char *m) { printf("\n%s",m); pressEnter(); } void mostraInfoPaciente(struct dados_paciente *p) { printf("\nFicha do paciente\n"); printf("Nome:\t%s", p->nome); printf("Idade:\t%hhu\n", p->idade); printf("Data de nascimento:\t%hhu\\%hhu\\%hu\n", p->data.dia, p->data.mes, p->data.ano); } int pegaInfoPaciente(struct dados_paciente *p) { char str[STR_MAX], op; do { printf("\n\tPreencha a ficha do paciente."); /* Pega o nome do paciente */ do { printf("\nDigite o nome completo do paciente.\n"); fgets(str, STR_MAX, stdin); if (strlen(str) > T_NOME) { printf("O nome do paciente deve ser menor do que %i caracteres.",T_NOME); pressEnter(); } else { printf("\nO nome está correto S\\N.\nDigite 0 para voltar para o menu anterior.\n:"); scanf("%c%*c",&op); if (op == '0') return(1); } } while (strlen(str) > T_NOME || toupper(op) == 'N'); strcpy(p->nome, str); /* Pega a idade do paciente */ do { printf("\nDigite a idade do paciente.\n"); fgets(str, STR_MAX, stdin); p->idade = atoi(str); if (strlen(str) > 3 || p->idade == 0) { erroMsg("Idade invalida."); } else { printf("\nA idade esta correta S\\N\nDigite 0 para voltar para o menu anterior.\n:"); scanf("%c%*c",&op); if (op == '0') return(1); } } while (strlen(str) > 3 || p->idade == 0); do { /* Pega a data de nascimente do paciente */ printf("\nDigite a data de nascimento do paciente.\n"); /* Dia */ do { printf("\nDigite dia.\n"); fgets(str, STR_MAX, stdin); p->data.dia = atoi(str); if (strlen(str) > 3 || p->data.dia == 0 || p->data.dia > 31) { erroMsg("dia invalido."); } else { printf("\no dia esta correta S\\N\nDigite 0 para voltar para o menu anterior.\n:"); scanf("%c%*c",&op); if (op == '0') return(1); } } while (strlen(str) > 3 || p->data.dia == 0 || p->data.dia > 31); /* Mês */ do { printf("\nDigite mes.\n"); fgets(str, STR_MAX, stdin); p->data.mes = atoi(str); if (strlen(str) > 3 || p->data.mes == 0 || p->data.mes > 12) { erroMsg("mes invalido."); } else { printf("\no mes esta correta S\\N\nDigite 0 para voltar para o menu anterior.\n:"); scanf("%c%*c",&op); if (op == '0') return(1); } } while (strlen(str) > 3 || p->data.mes == 0 || p->data.mes > 12); /* Ano */ do { printf("\nDigite ano.\n"); fgets(str, STR_MAX, stdin); p->data.ano = atoi(str); if (strlen(str) > 5 || p->data.ano < 1920 || p->data.ano > 2100) { erroMsg("ano invalido."); } else { printf("\no ano esta correta S\\N\nDigite 0 para voltar para o menu anterior.\n:"); scanf("%c%*c",&op); if (op == '0') return(1); } } while (strlen(str) > 5 || p->data.ano < 1920 || p->data.ano > 2100); printf("\n%hhu\\%hhu\\%hu", p->data.dia, p->data.mes, p->data.ano); printf("\nA data de nascimento esta correta\nS\\N:"); scanf("%c%*c",&op); } while (toupper(op) == 'N'); mostraInfoPaciente(p); printf("\nA ficha do paciente esta correta?\nS\\N:"); scanf("%c%*c", &op); } while (toupper(op) != 'S'); return(0); } é depois tentar fazer um sistema de cadastros.
  7. O problema é que o seu codeblocks está configurado para compilar para C++ é não para C, hoje em dia todo compilador de C++ consegue compilar C, mas você teria que configurar o compilador para isso. Tentativa de compilar em um compilador configurado para C++. Sintaticamente correto em um compilador de C. Pelo o que eu vi em C++ o cast e obrigatório, já em C e opcional. Eu acho que você ainda não entendeu muito bem as expressões em C, recomendo ler no livro c completo e total as expressões em C na pagina 56. Essa nota de uma aula da usp resume bem o porque de não colocar cast. Isso é necessário? Ou é só para caso de não precisar mais do ponteiro, daí libero a memória. Se você não for mais usar o ponteiro que você reservou memoria para ele, o correto e liberar a memoria do mesmo.
  8. Poderia me explicar o motivo? Comecei a estudar alocação dinâmica não faz muito tempo, e voltei aqui porque me lembro de ter lido isso. Basicamente porque o calloc inicializa todas as posições com zero, mas C é uma linguagem espartana, então só utilize quando precisar (ex: precisa reservar um bloco de memoria que não será utilizado em seguida, então inicialize com zero). O que isso quer dizer? Eu pesquisei e achei algo dizendo que converter o valor de retorno de, por exemplo, malloc() para x não altera o tipo do ponteiro, então não muda nada. Seria isso? Isso vale também pra realloc()? Deixar sem o cast seria, deixar de especificar para qual tipo você quer que a variável seja. Exemplo d = malloc(sizeof(int)); O compilador se encarregara de fazer. d = (int*)malloc(sizeof(int)); Quando você passa um endereço de memoria que é void para um ponteiro de int automaticamente ele se torna um ponteiro para inteiro. É especificar o tipo de variável seria isso. #include <stdio.h> #include <stdlib.h> typedef unsigned short hu16; int main(void) { hu16 *p, n; /* Reserva memoria para p */ p = malloc(sizeof(*p)); /* *p vai dar o tamanho para o ponteiro */ printf("\nTamanho da memoria reservada para o ponteiro:\t%lu\\bytes",sizeof(*p)); printf("\nTamanho do endereco ponteiro:\t%lu\\bytes",sizeof(p)); printf("\n\nTamaho da memoria reservada para n:\t %lu\\bytes",sizeof(n)); printf("\nTamanho do endereco que aponta para n:\t %lu\\bytes",sizeof(&n)); getchar(); /* Pausa */ /* Libera a memoria de p */ free(p); p = NULL; return(0); } Veja que se você tivesse colocado no malloc p = malloc(sizeof(hu16)) , se você precisasse mudar o nome da referencia do tipo (hu16) para outro nome (digamos hu32) você teria que mudar todos os lugarares onde faz referencia ao tipo (hu16). Vou deixa alguns links relacionados. C-Faq KernelCodingStyle
  9. KXSY

    Kali linux contém malware?

    Hahaha, Sim cara ele é feito para isso invadir sistemas. Mas não o seu! Sim também, mas o seu computador pelo o que você descreveu está com algum tipo de malware, que eu aposto que seja por causa de algum desses programas instalados (tipo o fraps). Quer uma dica de segurança? Instale o kalinux é esqueça os vírus.
  10. KXSY

    C Jogo jan-ken-pon em C

    você ainda está empacada nesse problema aqui Números aleatórios em c a resposta desse vai te dar a resposta para esse aqui. Eu acabei fazendo aqui, então tá aí.
  11. Pois é, como eu citei acima tem mais haver com a codificação do terminal do que com o alinhamento do printf em si. O correto seria converter cada caractere para utf-8 e só depois imprimir com printf. Eu iria deixar um exemplo com ncurses, mas eu não conseguir fazer funcionar com palavras acentuadas. então aqui vai um pouco de bruxaria em C. O exemplo que eu dei utiliza wide strings, é eu não sei se e correto utilizá-lo (eu estudei pouco sobre a biblioteca wchar.h) e todos os livros que eu li sobre C dizem para converter primeiro e imprimir depois. Uma coisa que eu ia esquecendo é, de uma olhada na tabela ASCII que você vai entender o problema.
  12. Não vou me aprofundar muito no assunto (mesmo porque toda vez que eu cito isso no fórum vira briga), mas o seu problema é por causa da codificação do terminal e pela maneira como o compilador lida com caracteres. Exemplo. No seu terminal já está correto, ele suporta naturalmente utf-8. Eu recomendo que você esqueça acentuação por hora, mas se você estiver interessado a sanar o problema de uma olhada nesse artigo da usp:Unicode e UTF-8 Uma maneira de contornar todo o problema e de quebra ter uma melhor organização e utilizar a ncurses, se não sabe o que é, então de uma olhada nessa ultima postagem que eu fiz(Jogo da cobrinha que eu não terminei!) ela utiliza a ncurses.
  13. @V!OLADOR De nada! Eu estou pensando em fazer um RPG no mesmo estilo para o console com as pessoas daqui do fórum (Meu deus eu tenho que procurar alguma coisa urgente para eu fazer).
  14. foi o próprio fórum que mudou de botões para botões (com certeza também mudou agora). Algum moderador deveria avisar para os mantedores do site para consertar.
  15. Fiz esse jogo assim que começou a pandemia, ele era apenas um protótipo para outro que eu estava fazendo para o mega drive (esse outro eu também não terminei). O jogo foi feito para rodar no linux, então se você quiser jogá-lo no window você vai ter que substituir a função usleep por outra compatível e instalar a biblioteca ncurses no seu compilador. Aqui o código fonte:codigoFonte.zip Para controlar utilize as teclas A,S,D,W.
  16. Isso está incorreto em C só é válido em C++, a maneira correta seria copiando os caracteres com strcpy. strcpy pertence a biblioteca string.h
  17. Até onde eu sei isso só Funciona em monitores de tubo (CRTs) é não, não tem problema fazer isso. Eu mesmo fazia quando gravava a tela do pc com uma câmera para evitar o hblank.
  18. 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; }
  19. @Mateus França de nada. infelizmente já faz muitos anos desde que eu joguei xadrez, então eu não consigo ajudar com muito. Uma ideia que eu acabei de ter e na colocação das peças no terminal, fica meio feio mas é funcional. Se você estiver usando o windows procure no fórum pelo tópico cartelas de bingo (eu acho que seja esse) o @arfneto tinha dado varias ideias que eu acho que pode ser útil para a resolução do seu problema. Aqui está o meu código para a demonstração da imagem. FizNaPressa
  20. Eu recomendo separar as peças do tabuleiro. Exemplo #include <stdio.h> /* Constantes */ #define Q_PECAS_XADREZ 16 /* Peças para cada jogador */ #define Q_BISPOS 2 #define Q_CAVALOS 2 #define Q_TORRES 2 #define Q_PEOES 8 #define Q_REIS 1 #define Q_RAINHAS 1 /* Definições */ enum jogador_vez {JOGADOR1, JOGADOR2}; /* Valor das peças do jogo */ enum pecas_jogo { BISPO, CAVALO, TORRE, PEAO, REI, RAINHA }; /* Posição em que a peça esta */ struct posicao_peca { unsigned short x, y; }; /* Declaração para uma única peça no jogo */ struct peca_xadrez { enum pecas_jogo peca; struct posicao_peca posicao; }; void iniciaJogador(struct peca_xadrez *p, enum jogador_vez j); int main(void) { struct peca_xadrez jogador1[Q_PECAS_XADREZ], jogador2[Q_PECAS_XADREZ]; int d; iniciaJogador(jogador1, JOGADOR1); for (d = 0; d < Q_PECAS_XADREZ; d++) { printf("\nX:%hu,Y:%hu,Peca:",jogador1[d].posicao.x, jogador1[d].posicao.y); switch (jogador1[d].peca) { case BISPO: printf("BISPO"); break; case CAVALO: printf("CAVALO"); break; case TORRE: printf("TORRE"); break; case REI: printf("REI"); break; case RAINHA: printf("RAINHA"); break; case PEAO: printf("PEAO"); break; } } getchar(); return(0); } void iniciaJogador(struct peca_xadrez *p, enum jogador_vez j) { int cont, tmp; if (j == JOGADOR1) { /* Inicia os bispos */ for (cont = 0; cont < Q_BISPOS; cont++) { p[cont].peca = BISPO; p[cont].posicao.x = ((1+cont)*3)-1; p[cont].posicao.y = 7; } /* Inicia os cavalos */ p[cont].peca = CAVALO; p[cont].posicao.x = 1; p[cont].posicao.y = 7; cont++; p[cont].peca = CAVALO; p[cont].posicao.x = 6; p[cont].posicao.y = 7; cont++; /* Inicia as torres */ tmp = cont; for (cont = 0; cont < Q_TORRES; cont++) { p[tmp].peca = TORRE; p[tmp].posicao.x = cont*7; p[tmp].posicao.y = 7; tmp++; } /* Inicia a rainha e o rei */ p[tmp].peca = RAINHA; p[tmp].posicao.x = 3; p[tmp].posicao.y = 7; tmp++; p[tmp].peca = REI; p[tmp].posicao.x = 4; p[tmp].posicao.y = 7; tmp++; /* Inicia os peões */ for (cont = 0; cont < Q_PEOES; cont++) { p[tmp].peca = PEAO; p[tmp].posicao.x = cont; p[tmp].posicao.y = 6; tmp++; } } else { /* Inicia os bispos */ for (cont = 0; cont < Q_BISPOS; cont++) { p[cont].peca = BISPO; p[cont].posicao.x = ((1+cont)*3)-1; p[cont].posicao.y = 0; } /* Inicia os cavalos */ p[cont].peca = CAVALO; p[cont].posicao.x = 1; p[cont].posicao.y = 0; cont++; p[cont].peca = CAVALO; p[cont].posicao.x = 6; p[cont].posicao.y = 0; cont++; /* Inicia as torres */ tmp = cont; for (cont = 0; cont < Q_TORRES; cont++) { p[tmp].peca = TORRE; p[tmp].posicao.x = cont*7; p[tmp].posicao.y = 0; tmp++; } /* Inicia a rainha e o rei */ p[tmp].peca = RAINHA; p[tmp].posicao.x = 3; p[tmp].posicao.y = 0; tmp++; p[tmp].peca = REI; p[tmp].posicao.x = 4; p[tmp].posicao.y = 0; tmp++; /* Inicia os peões */ for (cont = 0; cont < Q_PEOES; cont++) { p[tmp].peca = PEAO; p[tmp].posicao.x = cont; p[tmp].posicao.y = 1; tmp++; } } }
  21. Eu mudei os nomes de tudo, é acabei colocado código extra. Mas eu acho que você vai conseguir perceber o seu erro. #include <stdio.h> /* Constantes */ #define QUANT_ALUNOS 5 #define QUANT_RESPOSTAS 10 int main(void) { char respostas_alunos[QUANT_ALUNOS][QUANT_RESPOSTAS]; int resultado_alunos[QUANT_ALUNOS][QUANT_RESPOSTAS]; char gabarito[QUANT_RESPOSTAS] = {'a','b','d','a','b','d','a','b','d','c'}; int aluno, resposta; /* Inicia as matrizes */ for (aluno = 0; aluno < QUANT_ALUNOS; aluno++) { for (resposta = 0; resposta < QUANT_RESPOSTAS; resposta++) { respostas_alunos[aluno][resposta] = 0; resultado_alunos[aluno][resposta] = 0; } } /* Pega as respostas dos alunos */ for (aluno = 0; aluno < QUANT_ALUNOS; aluno++) { for (resposta = 0; resposta < QUANT_RESPOSTAS; resposta++) { printf("\nDigite a resposta [%i] do aluno [%i]:\t", resposta+1, aluno+1); scanf("%c%*c",&respostas_alunos[aluno][resposta]); } } /* Verifica as respostas */ for (aluno = 0; aluno < QUANT_ALUNOS; aluno++) { for (resposta = 0; resposta < QUANT_RESPOSTAS; resposta++) { if (respostas_alunos[aluno][resposta] == gabarito[resposta]) { resultado_alunos[aluno][resposta]++; } } } /* Mostra o resultado de cada aluno */ for (aluno = 0; aluno < QUANT_ALUNOS; aluno++) { printf("\nAluno[%i]",aluno+1); for (resposta = 0; resposta < QUANT_RESPOSTAS; resposta++) { printf("\nResposta[%i]:\t",resposta+1); if (resultado_alunos[aluno][resposta]) { printf("Acertou!"); } else { printf("Errou!"); } } printf("\nPressione enter para continuar."); getchar(); } return(0); }
  22. Recomendo dar uma olhada no algorítimo Fisher Yates. Um exemplo do funcionamento do algorítimo em C. #include <stdio.h> #include <stdlib.h> #include <time.h> /* Constantes */ #define Q_NUMEROS 30 int main(void) { int tmp, numeros[Q_NUMEROS]; /* Inicia o vetor */ for (tmp = 0; tmp < Q_NUMEROS; tmp++) { numeros[tmp] = tmp+1; } /* Inicia o gerador de numeros do sistema */ srand(clock()); /* Embaralha os numeros */ for (tmp = 0; tmp < Q_NUMEROS; tmp++) { int aux, indice = rand()%Q_NUMEROS; /* Troca o valor de posição no vetor */ aux = numeros[indice]; numeros[indice] = numeros[tmp]; numeros[tmp] = aux; } /* Mostra os valores aleatorios */ for (tmp = 0; tmp < Q_NUMEROS; tmp++) { printf("\n%i",numeros[tmp]); } /* Pausa o programa */ getchar(); return(0); }
  23. você está lidando com o GCC, é não o programa não compila da maneira que você escreveu. O seu programa não está funcionado por que você o escreveu com um comando de decisão que só aceita uma condição (verdadeiro ou falso). Exemplo de utilização do if. /* Se 3 e maior que 2 então é verdadeiro */ if (3 > 2) { /* Executa se verdadeiro */ } else { /* Executa se for falso */ } seria incorreto fazer outro else em seguida de um else. /* Se 3 e maior que 2 então é verdadeiro */ if (3 > 2) { /* Executa se verdadeiro */ } else { /* Executa se for falso */ } else { /* Erro! */ } o correto seria fazer um else if antes de outro else. /* Se 3 e maior que 2 então é verdadeiro */ if (3 > 2) { /* Executa se verdadeiro */ } else if (3 < 6) { /* Executa se verdadeiro */ } else { /* Executa se for falso */ } Outra coisa que está errada no seu programa é o uso de fflush(), muitos aqui vão falar "ah se está funcionado não importa" no meu caso para mim importa, porque o fflush() e utilizado para gravar informações de buffers em streams graváveis o que não é o caso do teclado. Uma maneira de evitar o enter no buffer do teclado é simplesmente retirá-lo junto com a entrada (isso também é gambiarra, mas é uma gambiarra menos danosa do que o flush()). para retirar o enter do buffer de teclado você usa o caractere de comando '%*c'. Exemplo. scanf("%d%*c", &n1);
  24. Então você está usando o gcc, tente configurá-lo corretamente na sua maquina (que com certeza está rodando windows). O seu código está muito confuso, seria melhor você postar todo o código. Aqui o exemplo de uma lista encadeada simples. De uma olhada.
  25. Qual o compilador você está usando? É só isso o seu código?

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!