Ir ao conteúdo
  • Cadastre-se

Asrety

Membro Pleno
  • Posts

    60
  • Cadastrado em

  • Última visita

  1. Como o @allanxd falou, você está utilizando ; logo apos um laço, tanto no while quanto no for, e além disso, você esta cometendo erros de logica, esse while por exemplo, você pede um numero de 0 até 100 mas a comparação do while é sempre que a for menor que 100 repita. Se for seguir esse intervalo proposto o usuário ficará em loop. No for também possui erro de logica, revise seu código e qualquer problema poste a sua duvida, boa sorte !
  2. @F1rmeza Sobre navegar no arquivo, eu recomendaria algo mais simples, a minha ideia seria criar um vetor de strings, e salvar cada palavra separadamente, com elas salvas, é só utilizar na posição gerada pelo rand. Agora sobre contar linhas, existem diversas maneiras de se fazer isto, está função por exemplo realiza esse trabalho: int contLines(FILE *file){ int lines=0; for(;;){ if(feof(file)) break; else if( (fgetc(file)) == '\n') lines++; } rewind(file); /* se você for seguir a dica que dei acima, esse rewind será muito importante, pois você terá que realizar uma nova leitura para salvar cada palavra separadamente, o rewind irá voltar para o começo para ler o conteudo do arquivo novamente. */ return ++lines; }
  3. @Devair Augusto da Silva Bom peguei esse código e fiz umas alterações e nos meus testes deu certo, teste ai e me diz se deu certo ou não #include <stdio.h> #include <stdlib.h> typedef struct escola{ char sexo; int idade; char nome[30]; }Escola; void main(){ Escola p; FILE *arquivo; arquivo = fopen("arquivo1.txt", "r"); if(arquivo == NULL){ printf("Nao foi possivel abrir o arquivo"); return; } while(1){ if(feof(arquivo)) break; fscanf(arquivo, "%c%d%[^\n]\n", &p.sexo, &p.idade, p.nome); printf("\np.sexo -> %c\np.idade -> %d\np.nome -> %s\n---------------------------", p.sexo, p.idade, p.nome); } fclose(arquivo); } lendo com %s tava dando errado, mudei para ler até achar uma quebra de linha, e logo após li essa quebra de linha e depois irá ler as próximas linhas, até acabar o arquivo
  4. @LucasCBSouto Uma opção seria alocação dinâmica, se não possui conhecimento, recomendo dar uma olhada pois seria uma boa. Agora sobre o seu código, está dando que i não foi declarado, e é isso mesmo, você declarou um vetor de float do tamanho i, sendo que a variável i só será criada na linha abaixo, então não dará certo, e mesmo se criar depois do i irá dar problemas pois o mesmo não terá valor, então uma solução é ler o tamanho que o usuário deseja na variável n, logo após você aloca dinamicamente o vetor float com tamanho n.
  5. @LucasCBSouto fico feliz bom aqui está um codigo que também funcionou (nos meus testes), ele está utilizando funções que foi a dica que nosso amigo @AnsiC deu para ti, postei mesmo só pra você olhar e ajudar alguem no futuro, boa sorte nos estudos ! #include <stdio.h> #define MAX 20 //definição do tamanho void inserirValores(int vetor[]){ //função para preencher printf("\n\nPreenchendo valores...\n\n"); for(int i=0; i<MAX; i++){ printf("\nN%d: ", i); scanf("%d", &vetor[i]); } } int verificarPrimo(int num){ //verificação separada de um numero por vez int contagem = 0; for(int i=1; i<=num; i++) if(num % i == 0) contagem ++; return (contagem == 2); //se contagem ficar com valor de 2, é primo, logo retornará 1, senão 0. } int main(){ int vetor[MAX], cont=0; inserirValores(vetor); for(int i=0; i<MAX; i++) if(verificarPrimo(vetor[i])) //se retornar 1 é um primo, e logo será incrementado cont++; printf("\n\nTotal de Numeros Primos: %d\n\n", cont); return 0; } E fique muito esperto em relação a chave, o @Flávio Pedroza te deu uma dica, e irei reforçar, como pode ver nesse código acima, no for de leitura de dados, foi necessário, pois passou de um comando(printf e scanf) , agora na main, pode ver que não utilizei, pois o for só possui um comando, o if, e dentro do if novamente somente um comando, então : 1 comando não precisa, passou disso é necessário, enfim, é isso.
  6. @Junior nss aqui está outra forma, mas bem parecida com o do nosso amigo @Flávio Pedroza segue o código abaixo: #include <stdio.h> #include <conio.h> int main(){ while(1){ printf("1001"); if(kbhit() && getch() == 97) break; } return 0; }
  7. printf("Entre com os numeros para os vetores:"); { for (i=0; i < 20; i++) scanf ("%d", &a[1]); } Além das chaves, verifique esse scanf, pois contém um erro nele. if( conta = 2) contap = contap + 1; Dentro de um if não usa somente um = para comparações, pois o compilador vai achar que você estará tentando definir o valor de conta para 2, então para resolver isso utiliza-se == . Enfim, se der certo ou errado, avise aqui, pois a galera irá te ajudar !
  8. #include<stdio.h> #include<string.h> // não precisa informar o tamanho, apenas char str[], basta void remover(char str[100],int i){ str[i]='.'; // a ideia é colocar um ponto onde o usuario informa? } int main(){ int p,; // aqui tem uma virgula no meio do nada char str[100]; //para ler string não precisa do &, e também não precisa informar esse [100], apenas o nome da string... //pois nesse caso você está tentando colocar informações somente na posição [100] scanf("%s",&str[100]); scanf("%i",&p); remover(str,p); printf("%s",str[100]); //novamente, para mostrar a string inteira, somente o nome dela ja basta. } Seu código com algumas mudanças: #include<stdio.h> #include<string.h> void remover(char str[], int i){ str[i] = '.'; } int main(){ int p; char str[100]; printf("\nFrase: "); scanf("%s", str); printf("\nPosicao: "); scanf("%i", &p); remover(str, p); printf("\nFrase Alterada: %s", str); return 0; }
  9. Fico feliz @TheNick, mas não agradeça somente a mim, os nossos amigos @allanxd e @Leonardo0308 também contribuíram bastante, eu tentei ajudar da maneira que pude, com certeza há muitas formas, explore elas, tente sempre inovar, e bons estudos a ti !
  10. @TheNick Sobre o nome, é devido ao scanf, abaixo é mostrado uma das maneiras para ler espaços, o scanf irá ler tudo até achar um '\n' que será o seu enter e acredito que terá problemas com buffer, então é necessário limpar antes de cada leitura de uma string, no exemplo utilizei o fflush, mas não é o mais recomendado, existem outros metodos para fazer isto, porém é só um exemplo... char teste[50]; fflush(stdin); scanf("%[^\n]", teste); Agora sobre o caractere estranho no 0 - sair, eu realmente não sei porque está assim, experimente reescrever esse printf para ver se resolve.
  11. @TheNick como disse não poderia garantir funcionamento, mas peço perdão... Agora eu realizei os testes com o código completo, novamente deixo aqui embaixo com algumas mudanças, espero que agora funcione ! #include<stdio.h> typedef struct{ char nome[50]; char rua[50]; char cpf[11]; int num; float saldo; }Lista; #define MAX 50 int p=0; //variavel global para contagem int menu(); void incluir(Lista a[]); void somando(float *soma, Lista a[]); void imprimir(Lista a[]); int main(void){ Lista lista[MAX]; int opcao; do{ opcao = menu(); switch(opcao){ case 1: incluir(lista); break; case 2: imprimir(lista); break; case 0: printf("Fim\n"); break; default: printf("Opcao invalida\n"); } }while (opcao != 0); } int menu(){ int op; printf("\n\tMENU\n"); printf("\n1. Incluir\n"); printf("2. Imprimir\n"); printf("0. Sair\n"); printf("\nSelecione uma opcao -> "); scanf("%d", &op); return op; } void incluir(Lista a[]){ if(p < MAX){ printf("\nInforme o nome: "); scanf("%s", a[p].nome); printf("Informe a rua: "); scanf("%s", a[p].rua); printf("Informe o numero da casa: "); scanf("%d", &a[p].num); printf("Informe o CPF: "); scanf("%s", a[p].cpf); printf("Informe o saldo da conta: "); scanf("%f", &a[p].saldo); p++; }else printf("\n\t\tLista cheia\n"); } void somando(float *soma, Lista a[]){ int i; for (i = 0; i < p; i++){ *soma += a[i].saldo; //soma recebe ela mesmo mais o saldo da posição i } } void imprimir(Lista a[]){ int i; float soma=0; printf("\nLISTA\n"); for (i = 0; i < p; i++){ printf("\nNome: %s", a[i].nome); printf("\nRua: %s", a[i].rua); //printf("\tNumero: %d", a[i].num); //printf("\tCPF: %s", a[i].cpf); printf("\nSaldo: %.2f\n", a[i].saldo); } somando(&soma, a); printf("\nSoma: %.2f\n", soma); }
  12. void somando(float *soma, struct lista a[], int *p){ int i; for (i = 0; i < *p; i++){ *soma += a[i].saldo; //soma recebe ela mesmo mais o saldo da posição i } } void imprimir(struct lista a[], int *p){ int i; float soma=0; //inicialização printf("\nLISTA\n"); for (i = 0; i < *p; i++){ printf("\nNome: %s", a[i].nome); printf("\nRua: %s", a[i].rua); // printf("\tNumero: %d", a[i].num); // printf("\tCPF: %s", a[i].cpf); printf("\nSaldo: %.2f\n", a[i].saldo); } somando(&soma, a, &p); //1 - passando a variavel soma como ponteiro para realizar modificações dentro dessa função // que no caso é para somar todos os saldos //2 - como a variavel ( a ) do tipo lista é um vetor, então não precisa passar como ponteiro // ela será util para ler os dados armazenados nela //3 - passando o tamanho via ponteiro printf("\nSoma: %.2f\n", soma); } Acima está seu código com algumas alterações, não posso garantir funcionamento, mas espero ter ajudado, dê o feedback se conseguiu ou não, até mais !
  13. Recomendo resolver o problema do buffer, existem muitas maneiras de fazer, faça uma pesquisa que encontrará facilmente e teste no seu problema, agora para ler, recomendo para estado e cidade, utilizar este método. char exemplo[40]; scanf("%[^\n]", exemplo); Esse scanf irá ler tudo(incluindo espaços, que é o objetivo) até ler um '\n' que será o ENTER, e salvará na string.
  14. Olá, @SamuraiOcidental, utilizando a sua tentativa como base, fiz um código que acredito que possa te ajudar, mas lembrando : pode possuir falhas e maneiras mais fáceis para chegar a está resolução. #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #include <string.h> typedef struct{ char nickUser[20]; char nickChar[20]; char senha[20]; char confirmaSenha[20]; }Player; int compararNickUser(Player aux[], int tam){ int i; for(i = 0; i<tam; i++) if(strcmp(aux[i].nickUser, aux[tam].nickUser) == 0){ printf("\n\nUsuario %s Não Disponível...\n", aux[tam].nickUser); printf("\nInforme outro usuario: "); fflush(stdin); scanf("%[^\n]", aux[tam].nickUser); return 0; } system("cls"); return 1; } int compararSenha(char string1[], char string2[]){ if(strcmp(string1, string2) != 0){ printf("Algo deu errado, as senhas não são iguais, por favor, tente mais uma vez\n"); printf("Tome cuidado com a sua senha, ela é muito importante!\n\n"); printf("Confirmação de Senha:"); fflush(stdin); scanf("%[^\n]", string2); return 0; } system("cls"); return 1; } int main(){ int count, qntdPlayer; Player players[5]; char stringaux[20]; FILE *Pfile; setlocale (LC_ALL,"Portuguese"); printf("\n\nPor favor, Informe quantos jogadores serão cadastrados(Limite de 5 jogadores): "); scanf("%d", &qntdPlayer); if (qntdPlayer < 1 || qntdPlayer > 5){ printf("\nNúmero de Cadastros Inválido!\n"); return 0; } for (count = 0; count < qntdPlayer; count++){ system("cls"); printf("Nome do Usuário:"); fflush(stdin); scanf("%[^\n]", players[count].nickUser); while(compararNickUser(players, count)!=1); printf("\nMuito bem, você usará esse nome para realizar o login no jogo!\nLogin: %s\n", players[count].nickUser); system("pause"); system("cls"); printf("Nome do Personagem:"); fflush(stdin); scanf("%[^\n]", players[count].nickChar); printf("\nPerfeito, é assim que seus amigos o reconhecerão!\nNick: %s\n", players[count].nickChar); system("pause"); system("cls"); printf("Senha: "); fflush(stdin); scanf("%[^\n]", players[count].senha); printf("Repita a senha para que ocorra a confirmação.\n\nConfirmação de Senha: "); fflush(stdin); scanf("%[^\n]", players[count].confirmaSenha); while(compararSenha(players[count].senha, players[count].confirmaSenha) != 1); printf("\nMais uma etapa concluida com louvor!\n\n"); system("pause"); system("cls"); } Pfile = fopen("texto.txt", "w"); if (Pfile == NULL){ printf("Erro na abertura do arquivo."); exit(0); } for (count = 0; count < qntdPlayer; count++) fprintf(Pfile, "\n\nNome: %s\nPersonagem: %s\nSenha: %s\n\n",players[count].nickUser, players[count].nickChar, players[count].senha); fclose(Pfile); return 0; } A lógica que utilizei pra resolver foi a seguinte : o usuário irá informar o nickuser, e logo após isso é chamada a função comparaNickUser dentro de um laço while, e ao entrar nessa função, é feito a comparação com o nickuser que o usuário escolheu, com todo o resto, e caso encontre um igual, será informado os dados novamente e retornará 0 para ser feito outra comparação. while(compararNickUser(players, count)!=1); Logo, só irá sair desse while quando o usuário informar um nickuser diferente de todos, ao contrario irá ficar chamando até a condição do while ser satisfeita( que no caso é quando entrar na função e não passar pelo if de igualdade, retornando 1 direto). E acabei fazendo outra função para compara a confirmação de senha, que utiliza a mesma lógica da função que acabei de explicar, e para seu código ficar completo só falta fazer a comparação nos nomes dos personagens, mas essa parte irei deixar para você tentar. Reforçando o que disse no começo: pode ter erros, pois não testei direito, e também pode haver meios mais fáceis, enfim, espero que isso possa te ajudar em algo!
  15. Sim @Ronald Lage é praticamente a mesma coisa com impar ou par(só muda o divisor em questão), e nesse if ele está buscando todas as vezes que o cont for divisível por 10 para realizar a quebra de linha, poderia ser outro valor, mas o real intuito era mostrar que o seu código não estava errado!

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