KXSY
Membro Pleno-
Posts
559 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que KXSY postou
-
C Comparar valor digitado com valor contido em arquivo txt C
KXSY respondeu ao tópico de matheusmarquex em C/C#/C++
@matheusmarquex Eu acho que a minha resposta não é a solução do problema, a sua é que seria. -
Mostre o que você já fez para os outros te ajudarem. De uma olhada nesse tópico. jogo jokenpo.
-
C Comparar valor digitado com valor contido em arquivo txt C
KXSY respondeu ao tópico de matheusmarquex em C/C#/C++
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. -
C Comparar valor digitado com valor contido em arquivo txt C
KXSY respondeu ao tópico de matheusmarquex em C/C#/C++
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. -
C Senha não apaga quando digitada incorretamente!
KXSY respondeu ao tópico de GeovaneAvilla em C/C#/C++
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). -
C Problema ao criar sistema de cadastro de covid para a faculdade!
KXSY respondeu ao tópico de GeovaneAvilla em C/C#/C++
@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. -
C Coisas obsoletas/que deveriam ser evitadas em C
KXSY respondeu ao tópico de Lucca Rodrigues em C/C#/C++
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. -
C Coisas obsoletas/que deveriam ser evitadas em C
KXSY respondeu ao tópico de Lucca Rodrigues em C/C#/C++
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 -
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.
-
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í.
-
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.
-
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.
-
@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).
-
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.
-
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.
-
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
-
overclock em monitor realmente funciona?
KXSY respondeu ao tópico de Bernardo Paiva Kroth em Overclock
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. -
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; }
-
@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
-
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++; } } }
-
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); }
-
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); }
-
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);
-
C ISO C++ forbids comparison between pointer and integer -fpermissive
KXSY respondeu ao tópico de Barry Stinson em C/C#/C++
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. -
C ISO C++ forbids comparison between pointer and integer -fpermissive
KXSY respondeu ao tópico de Barry Stinson em C/C#/C++
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