Ir ao conteúdo
  • Cadastre-se

88games16

Membro Pleno
  • Posts

    31
  • Cadastrado em

  • Última visita

Tudo que 88games16 postou

  1. @Flávio Pedroza Funcionou obrigado, porém porque usou na função Busca ponteiro para ponteiro para struct No ?
  2. verdade erro bobo porém mesmo assim ainda da erro se eu não chamar a função busca no main chamar apenas a função insere e enumera o programa roda
  3. criei uma função para inserir palavras em uma lista encadeada porém se essa palavra já estiver presente na lista aumenta o contador indicando quantas vezes essa palavra aparece o código faz bem a parte de inserir e enumerar a lista porém a busca não faz alguém poderia me ajudar resolver esse problema #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct No { char chave[20]; int num; struct No * Prox; } No; No * L = NULL; void Enumere (No * L) { //Vai imprimir a lista. No * p = NULL; p = L; while (p != NULL){ printf("%s\t repeticoes: %d\n", p->chave , p->num); p = p->Prox; } }; void Insere(No** L, char nome[], int x){ No * novo = NULL; novo = (No *) malloc(sizeof(No)); strcpy(novo->chave, nome); novo->num = x; novo->Prox = *L; //insere um novo elemento na 1º posição da lista *L= novo; }; /*void Busca (No* L, char nome[]){ No * p = NULL; p = L; while ((p!=NULL)&& (strcmp(p->chave, nome)!= 0)){ p = p->Prox; } if(p!=NULL){ p->num = p->num+1; } };*/ void Busca (No *L, char nome[]){ No* p; p = L; if(p = NULL){ Insere (&L, nome,1);//lista vazia então insere elemengo }else{ while ((p!= NULL) && (strcmp(p->chave, nome)!= 0)){//varrer lista até fim ou até encontrar o elemento p = p->Prox; } if(p!=NULL){//p!= /null quer dizer que encontrou o elemento antes de chegar ao fim da lista p->num = p->num +1;//aumenta o contador numero de vezes que o elemento aparece }else{ Insere(&L, nome,1);//não encontrou elemento então insere } } }; int main(){ No * L = NULL; char teste[]="cenoura"; char teste2[]="suco"; char teste3[]="computador"; char teste4[]="suco"; Insere(&L,teste,1); Insere(&L,teste2,1); Insere(&L,teste3,1); Busca(&L,teste4); Enumere(L); return 0; }
  4. seria ler as palavras do arquivo e pegar as palavras e jogar em uma lista encadeada as palavras
  5. consegui ler o arquivo porém no final após rodar da falha de segmentação alguém pode ajudar #include <stdio.h> #include<stdlib.h> #include<string.h> int main(){ int i,j,tam,tam_teste; i =0; j=0; char teste[20]; char linha[100]; FILE *arq = fopen("texto","r"); if(arq == NULL) // testa se o arquivo foi aberto com sucesso { printf("\n\nImpossivel abrir o arquivo!\n\n"); return 1; } while(fgets(linha, 100, arq) != NULL){ tam = strlen(linha); printf("%s",linha); i=0; while(i<=tam){ j=0; while (linha[i]!=' '){ teste[j] = linha[i]; // copiando as palavras para um vetor i = i+1; j = j+1; } if (linha[i] == ' '){ teste[j]='\0'; i=i+1; }else if((linha[i]== '\0') || (linha[i] == '\n')){ teste[j]='\0'; } printf("palavra lida %s",teste); printf("\n"); for (j=0;j<20;j++){ teste[j]='\0'; //zerando o vetor para ler a proxima palavra } } } fclose(arq); return 0; }
  6. só botei para ler entrada padrão para testar as modificações que fiz agora do jeito que está só não imprime a ultima palavra mas se tiver um espaço em branco ou qualquer coisa após ela a imprime tudo certo
  7. @arfneto mas o primeiro loop ele vai ler ate '\0' como isso não vai ler a string toda ? e o segundo loop eu tenho que ler cada palavra da string ler ela toda ate o "espaço" que separa cada palavra refiz o código e agora esta imprimindo só tem um problema se a ultima palavra tiver 3 vogais ou + imprime int main(){ // char * str = "caixa jujuba casa bar telefone marinha melao"; char str [80]; char str2 [20]; int i,j,tam,qt,tam2; i=0; j=0; qt =0; for (j=0;j<20;j++){ str2[j]='\0'; } printf("digite a sequencia de strinsca: "); fgets (str,80,stdin); // frase digitada printf("frase %s",str); while (str[i]!='\0'){ j=0; while (str[i]!=' '){ str2[j] = str[i]; // copiando as palavras para um vetor i = i+1; j = j+1; } if (str[i] == ' '){ str2[j]='\0'; i=i+1; } tam = strlen(str2); for (j=0;j<tam;j++){ if ( str2[j] == 'a' || str2[j] == 'e' || str2[j] == 'i' || str2[j] == 'o' || str2[j] == 'u'){ qt = qt+1; } } if (qt >=3){ printf("palavra: %s\n",str2); } qt =0; } return 0; }
  8. #include <stdio.h> #include <string.h> int main(){ char * str = "caixa cafe telefone casa"; char str2 [20]; int i,j,tam,qt; i=0; j=0; qt =0; for (j=0;j<20;j++){ str2[j]='\0'; } j=0; //printf("digite a sequencia de strins: "); //fgets (str,80,stdin); // frase digitada while (str[i]!='\0'){ while (str[i]!=' '){ str2[j] = str[i]; // copiando as palavras para um vetor i = i+1; } while (str[i] == ' '){ i=i+1; } tam = strlen(str2); for (j=0;j<tam;j++){ if ( str2[j] == 'a' || str2[j] == 'e' || str2[j] == 'i' || str2[j] == 'o' || str2[j] == 'u'){ qt = qt+1; } } if (qt >=3){ printf("palavra: %s\n",str2); } for (j=0;j<20;j++){ str2[j]='\0'; } j=0; qt =0; } return 0; } mesmo ja definindo uma frase ainda sim da errado só que não estou conseguindo achar o erro na lógica
  9. @arfneto o str2 tem 20 apenas pois uso esse vetor para ler cada palavra que foi digitada na frase e estou assumindo que cada palavra individualmente não será maior que 20 na forma que escrevi o código é para o vetor str2 ler cada palavra da frase verificar se a palavra tem ao menos 3 vogais e imprimir depois de cada print eu zero ele para ler a segunda palavra da frase porém não esta fazendo isso ele imprime a primeira palavra porém não continua não sei o que esta errado no código na cabeça esta certo
  10. @allanxd entendi porém não pode usar essa função na resolução
  11. @allanxd não conheço essa função minha programação é inicial
  12. @allanxd não pode usar essa função strtok da forma que esta imprime a primeira palavra e depois da erro de segmentação
  13. estou com dificuldade no seguinte problema tenho que ler uma frase e printar todas as palavras que tenham 3 ou + vogais #include <stdio.h> #include <string.h> int main(){ char str[80]; char str2 [20]; int i,j,tam,qt; i=0; j=0; qt =0; for (j=0;j<20;j++){ str2[j]='\0'; } j=0; printf("digite a sequencia de strins: "); fgets (str,80,stdin); // frase digitada while (str[i]!='\0'){ while (str[i]!=' '){ str2[j] = str[i]; // copiando as palavras para um vetor i = i+1; } while (str[i] == ' '){ i=i+1; } tam = strlen(str2); for (j=0;j<tam;j++){ if ( str2[j] == 'a' || str2[j] == 'e' || str2[j] == 'i' || str2[j] == 'o' || str2[j] == 'u'){ qt = qt+1; } } if (qt >=3){ printf("palavra %s\n",str2); } for (j=0;j<20;j++){ str2[j]='\0'; } j=0; qt =0; } return 0; }
  14. fiz um programa para inverter a ordem dos valores escritos em um vetor porém gostaria de saber como fazer usando recursividade alguém pode ajudar #include <stdio.h> void inverte_vetor(int v[], int n) { int i, j, tmp; i = 0; j = n-1; while (i < j) { tmp = v[i]; v[i] = v[j]; v[j] = tmp; i++; j--; } } int main(void) { int v[]={1,2,3,4,5,6}; int n = 6, i; inverte_vetor(v, n); for (i = 0; i < n; i++) printf("%d ", v[i]); printf("\n"); return(0); }
  15. mas as informações são digitadas pelo usuário e não sei qnts diferentes cadastros serão preenchidos
  16. struct Aluno{ char nome[20]; int idade; }; int main(){ struct Aluno cadastro[50]; int i=0; while(cadastro != '\0'){ i++; } tentei assim mas não funciona
  17. como encontro a primeira posicao vaiza de um vetor de struct
  18. quero escrever e ler em um arquivo binário porém quero que nas strings ocupe exatamente o tamanho da string digitada e não todo o espaço reservado escrendo esta sempre ocupando espaços a mais do que deveria não sei o porque e também estou com problemas para ler apenas o tamanho certo de cada string digitada struct Fornecedor { char cia[25]; char cnpj[15]; char tel[15]; char email[40]; }; struct Fornecedor fornecedores; //para escrever no arquivo void inputFornecedor(){ system("clear"); printf("Cadastro de fornecedores:"); quebra_linha(); int i; char resp; FILE* f; f = fopen("teste.bin", "ab"); do { preenche_fornecedor(&fornecedores); int len = strlen(fornecedores.cia); fwrite (&len ,sizeof(int),1,f); fwrite(&fornecedores.cia, sizeof(char), len, f); int len2 = strlen(fornecedores.cnpj); fwrite (&len2 ,sizeof(int),1,f); fwrite(&fornecedores.cnpj, sizeof(char), len2, f); int len3 = strlen(fornecedores.tel); fwrite (&len3 ,sizeof(int),1,f); fwrite(&fornecedores.tel, sizeof(char), len3, f); int len4 = strlen(fornecedores.email); fwrite (&len4 ,sizeof(int),1,f); fwrite(&fornecedores.email, sizeof(char), len4, f); printf("gostaria de cadastrar outro fornecedor (s/n) ? \n"); getchar(); scanf("%c",&resp); }while(resp =='s'); fclose(f); system("clear"); menu(); }
  19. // imprime os valores do vetor int i; int maior=0; int vet[10]; for (i=0; i<10; i++){ if(vet[i] > maior){ maior = vet[i]; } printf("%d",vet[i]); } printf("%d", maior);// maior valor do vetor
  20. para preencher o vetor de struct uso este codigo a dificuldade é na hora de cadastrar novos dados como faço para escreer no vetor struct a partir de onde parei na ultima vez int i=0; int n; struct Fornecedor fornecedores[40]; FILE* f; f = fopen("teste.txt", "ab"); printf("quantos fornecedores deseja cadastrar: "); scanf("%d",&n); quebra_linha(); for (i; i < n ; i++){ preenche_fornecedor(&fornecedores[i]); fwrite(fornecedores[i].cod, sizeof(char), strlen(fornecedores[i].cod)+1, f); fwrite(fornecedores[i].cnpj, sizeof(char), strlen(fornecedores[i].cnpj)+1, f); fwrite(fornecedores[i].nome, sizeof(char), strlen(fornecedores[i].nome)+1, f); } fclose(f);
  21. porque o campor cnpj virou um vetor bidimensional ? o campo id só quero armazenar até 2 caracteres mesmo não entendi opq de aumentar
  22. problema no algoritmo a função "void preenche_fornecedor" preencho os dados dos forncedores e depois escrevo no arquivo esses dados com a função "void inputFornecedor()" com a função "void preenche_produtos" eu faço o mesmo só que para produtos porém eu não queria ter que informar novamente os dados do cnpj e nome da empresa queria informar apenas o id e com esse id na hora de visualizar buscar as informações referentes a cnpj e nome da empresa ja gravadas no arquivo. Não sei como fazer isso ou se é possível alguem poderia me ajudar codigo a abaixo. #include <stdio.h> #include <string.h> #include <stdlib.h> void menu(); void opcao_menu(); void visualizar_fornecedor(); void inputEstoque(); void visualizar_Estoque(); struct Fornecedor { char cod[3]; char cnpj[15]; char cia[20]; }; struct Produto{ struct Fornecedor f; char nome[20]; int qtd; int custo; int valorc; int venda; }; struct Fornecedor fornecedores; struct Produto produtos; void quebra_linha(){ printf("\n"); } //preencher fornecedores void preenche_fornecedor (struct Fornecedor *p){ fflush(stdin); printf("codigo do fornecedor: "); scanf ("%s", p->cod); fflush(stdin); printf("informe cnpj do fornecedor: "); scanf("%s",p->cnpj); fflush(stdin); printf("nome da empresa: "); scanf("%s",p->cia); } void preenche_produtos (struct Produto *p){ preenche_fornecedor(&(*p).f); printf ("informe o produto p/ cadastrar no estoque: "); //getchar(); scanf("%s",p->nome); //fgets (p->nome,20,stdin); printf ("informe a quantidade da compra: "); scanf("%d",&p->qtd); printf("informe o preço unitario: "); scanf("%d",&p->custo); p->valorc=p->custo*p->qtd; printf("valor da mercadoria no estoque %d: ",p->valorc); p->venda = (p->valorc*1.4) - (p->valorc) ; } // cadastrar fornecedor e escrever no arquivo void inputFornecedor(){ system("clear"); int i; char resp; FILE* f; f = fopen("testeafornecedor.txt", "ab"); do { preenche_fornecedor(&fornecedores); fwrite(&fornecedores, sizeof(struct Fornecedor), 1, f); printf("gostaria de cadastrar outro fornecedor (s/n) ? \n"); getchar(); scanf("%c",&resp); }while(resp =='s'); fclose(f); system("clear"); menu(); } // visualizar na tela informações escritas no arquivo void visualizar_fornecedor(){ system("clear"); FILE* f; f = fopen("testeafornecedor.txt", "rb"); while (fread(&fornecedores, sizeof(struct Fornecedor), 1, f)==1){ printf("---------------------------------------------"); quebra_linha(); printf("Codigo de registro: %s\n", fornecedores.cod); printf("Cnpj: %s\n", fornecedores.cnpj); printf("Empresa %s\n", fornecedores.cia); printf("---------------------------------------------"); quebra_linha(); } fclose(f); getchar(); getchar(); menu(); } void inputEstoque(){ char resp; system("clear"); FILE* f; f = fopen("testeaestoque.txt", "ab"); do { preenche_produtos (&produtos); fwrite(&produtos, sizeof(struct Produto), 1, f); quebra_linha(); printf("gostaria de cadastrar outro produto (s/n) ? \n"); getchar(); scanf("%c",&resp); }while(resp =='s'); fclose(f); system("clear"); menu(); } void visualizar_Estoque(){ system("clear"); FILE* f; f = fopen("testeaestoque.txt", "rb"); while (fread(&produtos, sizeof(struct Produto), 1, f)==1){ printf("---------------------------------------------"); quebra_linha(); printf("Codigo de registro: %s\n", produtos.f.cod); printf("Cnpj: %s\n", produtos.f.cnpj); printf("Empresa %s\n", produtos.f.cia); printf ("Produto %s\n", produtos.nome); printf ("Quantidade %d\n", produtos.qtd); printf("preco unidade %d\n", produtos.custo); printf("valor do estoque %d\n", produtos.valorc); printf("lucro esperado %d\n", produtos.venda); printf("---------------------------------------------"); quebra_linha(); } fclose(f); getchar(); getchar(); menu(); } // menu void menu (){ system("clear"); printf (" --------------ESTOQUE EMPRESA ABC--------------\n"); quebra_linha(); printf("Menu:\n"); printf("1 - Consultar estoque cadastrado: \n"); printf("2 - Consultar fornecedores cadastrados: \n"); printf("3 - Cadastrar novo item no estoque: \n"); printf("4 - Cadastrar novo fornecedor: \n"); printf("5 - sair\n"); opcao_menu(); } void opcao_menu(){ int opcao; scanf("%d",&opcao); switch (opcao){ case 1: visualizar_Estoque(); break; case 2: visualizar_fornecedor(); break; case 3: inputEstoque(); break; case 4: inputFornecedor(); break; case 5: system("clear"); printf (" --------------EMPRESA ABC--------------\n"); quebra_linha(); quebra_linha(); break; default: printf("valor invalido"); quebra_linha(); menu(); } } int main(){ menu(); return 0; }
  23. era uma questão de prova seria um arquivo pronto já com varias dessas matérias e os dias de aula no formato do exemplo ali de cima eu pensei que poderia ser algo assim struct grade{ char materia[26]; char dias[50]; }; int main(){ struct grade grade[100]; int i=0; int num=0; char l; char str[1000]; char url[]="arquivo.txt" FILE *arq; arq = fopen(url, "r"); while( (fgets(str, sizeof(char), arq))!=NULL ){ grade[i] = fgetc(arq) i++ } l = fegtc(arq); while ( l != EOF){ if(l == '\n'){ num++; // numero de linhas do arquivo } } fclose(arq); for (i=0; i<num; i++){ printf("%s", grade[i]); } return 0;

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