Ir ao conteúdo
  • Cadastre-se

Asrety

Membro Pleno
  • Posts

    60
  • Cadastrado em

  • Última visita

posts postados por Asrety

  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 !

    • Curtir 1
    • Obrigado 1
  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;
    }

     

    • Curtir 1
  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

    • Curtir 1
    • Amei 1
  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.

    • Curtir 1
  5. @LucasCBSouto fico feliz :D 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.

    • Curtir 1
    • Obrigado 1
  6.     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 !

    • Amei 1
  7. 1 hora atrás, VictorCalebe disse:

    Faça um programa que possua uma função que remova um caracter de uma string do tipo char Str[100], dada a posição do caracter.

     

    O que tem de errado no meu código ??

     

    #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;
    }

     

    • Amei 1
  8. @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.

    • Obrigado 1
  9. @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);
    }

     

    • Obrigado 1
  10. 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 !

    • Curtir 1
  11. 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.

    • Curtir 1
  12. 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!

    • Obrigado 1
  13. 1 hora atrás, Ronald Lage disse:

    @Asrety, o que seria esse If? Me lembra o comando para dizer se é par ou impar, mas não compreendi direito o que ele está fazendo. Pule uma linha Se o quê?

     

    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!

    • Curtir 1
  14. Acredito que está tudo normal, o único "problema" é que aparentemente o terminal esta limitando a quantidade de dados que está sendo exibido, abaixo é apenas um teste para comprovar isto que falei, teste ai e me diz se apareceu todos os valores.

    #include<stdlib.h>
    #include<stdio.h>
    #include<locale.h>
    
    int main(){
        
        setlocale(LC_ALL,"portuguese");
    
        int cont=0, num=200;
    
        while(cont<=200){
            printf(" %d ", cont);
            cont++;
            printf(" %d ", num);
            num--;
    
            if(cont % 10 == 0) printf("\n");
        }
    
        system("pause");
      	return 0;
    }

     

    • Curtir 1
  15. Ao analisar este código, da para perceber que poderá ter problemas com buffer sujo, e também não irá conseguir ler espaços na leitura da cidade, já o estado irá conseguir ler espaços, porém não é recomendado utilizar essa função gets.

    • Curtir 2
  16. 1 hora atrás, wendelroberta disse:

    De fato o codigo esta rodando, porém ele só ordena ate 2 nomes, quando tem mais ja não ordena. 

     

    erro2.jpg

    o problema ai é que ta usando a tabela ascii para comparação, o nome adriana não irá ficar em primeiro pois o 'a' vale 97, enquanto o 'B' vale 66, enfim, acredito que possa ser isso ! pra tentar evitar isso tente deixar a primeira letra de cada nome maiúscula.

    • Curtir 2
  17. 1 hora atrás, Matheus V.M.C disse:

    É vdd. o que eu tenho q mudar então?

    Você deverá criar uma variável separada para ser utilizado no laço de repetição, e informar o intervalo que irá ser rodado de acordo com a necessidade do exercício, que será ir de 1 até n, e caso tenha duvidas ainda, recomendo estudar sobre como os laços de repetição funcionam.

    • Amei 1

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!