-
Posts
96 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Gabriel_Moro postou
-
C Percorrer um arquivo binário + comparação
Gabriel_Moro respondeu ao tópico de Vagner Wentz em C/C#/C++
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> typedef struct Maratonista{ int numeroCadastro; char nomeMaratonista[50]; int idadeMaratonista; int tempoProva; // O tempo de prova será dado em minutos }MARATONISTA; FILE *openFile(char *fileName, char *mode) { // Abertura do arquivo FILE *arquivo = NULL; arquivo = fopen(fileName, mode); if (arquivo == NULL) { printf("Erro ao abrir o arquivo!"); return NULL; } return arquivo; } void closeFile(FILE *arquivo) { fclose(arquivo); } void recordData(MARATONISTA *m) { FILE *f = openFile("arq.txt", "rb+"); fseek(f,0,SEEK_END); fwrite(m, 1, sizeof(MARATONISTA), f); fclose(f); } int sizeFile(){ long s; FILE *f = openFile("arq.txt", "rb"); fseek(f,0,SEEK_END); s = ftell(f); fclose(f); return s/sizeof(MARATONISTA); } void printFile(){ int t = sizeFile(); int i; MARATONISTA m; FILE *f = openFile("arq.txt", "rb"); fseek(f,0,SEEK_SET); for(i=0; i<t; i++){ fseek(f,i*sizeof(MARATONISTA),SEEK_SET); // esse fseek não é necessario quando se percorre sequencialmente - fica como exemplo fread(&m,1,sizeof(MARATONISTA),f); printf("%s\n", m.nomeMaratonista); } closeFile(f); } int main() { FILE *f = openFile("arq.txt", "wb"); fclose(f); MARATONISTA m; m.numeroCadastro = 1; strcpy(m.nomeMaratonista,"Maria"); m.idadeMaratonista = 20; m.tempoProva = 2; recordData(&m); m.numeroCadastro = 2; strcpy(m.nomeMaratonista,"João"); m.idadeMaratonista = 22; m.tempoProva = 3; recordData(&m); m.numeroCadastro = 3; strcpy(m.nomeMaratonista,"Paulo"); m.idadeMaratonista = 24; m.tempoProva = 3; recordData(&m); printf("O arquivo tem %d registros\n", sizeFile()); printFile(); return 0; } faça uso de funções fseek e fteel para acessar diretamente as posições dos registros no arquivo (pode manipular o arquivo como se fosse um vetor, mas quanto maior fica, fica mais lento - o arquivo ta no disco) teu fwrite possui parâmetros invertidos para fazer os itens 4 e 5 deve-se percorrer o arquivo comparando maior = 0; // 4-mais velho MARATONISTA maisVelho; for percorre MARATONISTA m; if(m.idade>maior) maior = m.idade; maisVelho = m; return maisVelho; -
void ordenaT(celula *lista){ celula *ant, *atual, *aux; int ok=0; ant=lista; atual=lista; while(ok==0){ ok=1; ant=lista; atual=lista; while(atual!=NULL){ if(ant->tempo>atual->tempo){ ok=0; aux=ant; ant=atual; atual=aux; } ant=atual; atual=atual->prox; } } }
-
C o que está errado neste programa STRUCT
Gabriel_Moro respondeu ao tópico de Thales Muchante em C/C#/C++
procure não usar o nome da struct como variavel também final é uma palavra reservada, então não nomeie nada com esse nome -
struct Eleitor{ int idade; char nome[30]; int prioridade; }eleitor; tu pode criar uma fila de prioridade, se a pessoa tiver menos de 65 o prioridade recebe 0 senão 1 e no retirar_fila() primeiro verifica a partir do inicio se tiver alguém com prioridade, se tiver ele será o próximo a ser atendido, senão atende normalmente o primeiro da fila
-
C Lista Encadeada - Não inserir números iguais
Gabriel_Moro respondeu ao tópico de ineedahelp em C/C#/C++
printf("Novo elemento:\n\n "); scanf("%d", &novo->num); novo->prox = NULL; depois que tu tem um novo nodo, tu pode enviar ele para uma função que percorre toda a lista verificando se tem um valor igual, se depois de percorrer não tiver tu insere -
estou tentando tirar informações de um arquivo que contem nomes e idades, os nomes são brasileiros então muitos tem acentos e eu não estou conseguindo ler eles corretamente #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <locale.h> void criaTxt() { FILE *f = fopen("registroOrganizado.txt", "w"); fclose(f); } void mostraAntesOrganizado() { char texto[50]; FILE *f = fopen("1.csv", "r"); fseek(f, 0, SEEK_SET); while (1) { fgets(texto, sizeof(texto), f); if(feof(f)) break; printf("%s", texto); getchar(); } fclose(f); } int main(void) { setbuf(stdout, NULL); setlocale(LC_ALL, "Portuguese"); //criaTxt(); mostraAntesOrganizado(); return EXIT_SUCCESS; } 1.csv
-
não estou compreendendo essa leitura... assim como deviria ser não funciona #include <stdio.h> #include <stdlib.h> typedef struct cabecalhoArquivo { unsigned short int bfType; unsigned long int bfSize; unsigned short int bfReserved1; unsigned short int bfReserved2; unsigned long int brOffbits; } CABECALHOARQUIVO; int main () { CABECALHOARQUIVO *cara = malloc(sizeof(CABECALHOARQUIVO)); FILE *f = fopen("st1012.bmp", "rb"); fread(cara, sizeof(CABECALHOARQUIVO), 1, f); printf("Tipo: %x, Tamanho: %ld, BfReserved1: %hd, BfReserved2: %hd, BfOffBits: %ld", cara->bfType, cara->bfSize, cara->bfReserved1, cara->bfReserved2, cara->brOffbits); fclose(f); return 0 ; } e assim Byte a Byte funciona #include <stdio.h> #include <stdlib.h> typedef struct cabecalhoArquivo{ unsigned char bfType1; unsigned char bfType2; unsigned char bfSize1; unsigned char bfSize2; unsigned char bfSize3; unsigned char bfSize4; unsigned char bfReserved11; unsigned char bfReserved12; unsigned char bfReserved21; unsigned char bfReserved22; unsigned char brOffbits1; unsigned char brOffbits2; unsigned char brOffbits3; unsigned char brOffbits4; }CABECALHOARQUIVO; int main(void) { setbuf(stdout,NULL); CABECALHOARQUIVO *cara=malloc(sizeof(CABECALHOARQUIVO)); FILE *f=fopen("st1012.bmp", "rb"); fread(cara, sizeof(CABECALHOARQUIVO), 1, f); printf("Tipo: %x %x, Tamanho: %x %x %x %x, BfReserved1: %x %x, BfReserved2: %x %x, BfOffBits: %x %x %x %x", cara->bfType1, cara->bfType2, cara->bfSize4, cara->bfSize3, cara->bfSize2, cara->bfSize1, cara->bfReserved12, cara->bfReserved11, cara->bfReserved22, cara->bfReserved21, cara->brOffbits4, cara->brOffbits3, cara->brOffbits2, cara->brOffbits1); fclose(f); return EXIT_SUCCESS; }
-
estou tentando ler arquivos .BMP e não estou conseguindo, o site mais interessante sobre os .bmp que eu achei foi http://www.dragonwins.com/domains/getteched/bmp/bmpfileformat.htm (estou me baseando nele) #include <stdio.h> #include <stdlib.h> typedef struct cabecalhoArquivo{ char bfType1; char bfType2; int bfSize; short bfReserved1; short bfReserved2; int bfOffBits; }CABECALHOARQUIVO; typedef struct cabecalhoImagem{ int biSize; int biWidth; int biHeight; short biPlanos; short biBitCount; int biCompression; int biSizeImage; int biXPelsPerMeter; int biYPelsPerMeter; int biClrUsed; int biClrImportant; }CABECALHOIMAGEM; int main(void) { setbuf(stdout,NULL); CABECALHOARQUIVO *cara=malloc(sizeof(CABECALHOARQUIVO)); CABECALHOIMAGEM *cabI=malloc(sizeof(CABECALHOIMAGEM)); FILE *f=fopen("st1012.bmp", "rb+"); fread(cara, sizeof(CABECALHOARQUIVO), 1, f); printf("Tipo: %c%c, Tamanho: %d, BfReserved1: %hd, BfReserved2: %hd, BfOffBits: %d", cara->bfType1, cara->bfType2, cara->bfSize, cara->bfReserved1, cara->bfReserved2, cara->bfOffBits); fread(cabI, sizeof(CABECALHOIMAGEM), 1, f); printf("\nBiSize: %d, BiWidth: %d, BiHeight: %d, BiPlanos: %hd, BiBitCount: %hd, BiCompression: %d, BiSizeImage: %d, BiXPelsPerMeter: %d, BiYPelsPerMeter: %d, BiClrUsed: %d, BiClrImportant: %d", cabI->biSize, cabI->biWidth, cabI->biHeight, cabI->biPlanos, cabI->biBitCount, cabI->biCompression, cabI->biSizeImage, cabI->biXPelsPerMeter, cabI->biYPelsPerMeter, cabI->biClrUsed, cabI->biClrImportant); fclose(f); return EXIT_SUCCESS; } st1012.bmp
-
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct musica { char cd[20]; int excluido; } MUSICA; void insere(FILE *f, MUSICA novo) { fwrite(&novo, sizeof(MUSICA), 1, f); } MUSICA *buscaCD(FILE *f, char cd[20], long *checkPoint) { MUSICA *m = malloc(sizeof(MUSICA)); fseek(f, SEEK_SET, 0); while (1) { *checkPoint = ftell(f); fread(m, sizeof(MUSICA), 1, f); if (feof(f)) break; if (strcmp(m->cd, cd) == 0) return m; } return NULL; } void altera(FILE *f, char busca[20], MUSICA alterado) { MUSICA *m; long checkPoint; m = buscaCD(f, busca, &checkPoint); fseek(f, checkPoint, 0); if (m != NULL) { fwrite(&alterado, sizeof(MUSICA), 1, f); printf("\nRegistro alterado!"); } else printf("\nRegistro inexistente!"); } void exclui(FILE *f, char busca[20]) { MUSICA *m; long checkPoint; m = buscaCD(f, busca, &checkPoint); fseek(f, checkPoint, 0); if (m != NULL && m->excluido == 0) { m->excluido=1; fwrite(m, sizeof(MUSICA), 1, f); printf("\nRegistro apagado!"); } else printf("\nRegistro inexistente!"); } void reorganiza(FILE *f) { MUSICA m; FILE *g = fopen("auxx.txt", "wb+"); fseek(f, SEEK_SET, 0); while (1) { fread(&m, sizeof(MUSICA), 1, f); if (feof(f)) break; if (m.excluido == 0) { fwrite(&m, sizeof(MUSICA), 1, g); } } fclose(g); } void mostra(FILE *f) { MUSICA m; fseek(f, SEEK_SET, 0); printf("\n"); while (1) { fread(&m, sizeof(MUSICA), 1, f); if (feof(f)) break; if (m.excluido != 1) printf("CD: %s\n", m.cd); } } int main() { FILE *f = fopen("arq.txt", "wb+"); MUSICA novo; MUSICA *busca; strcpy(novo.cd, "CD 123"); novo.excluido = 0; insere(f, novo); strcpy(novo.cd, "CD 456"); novo.excluido = 0; insere(f, novo); strcpy(novo.cd, "CD 789"); novo.excluido = 0; insere(f, novo); long checkPoint; busca = buscaCD(f, "CD 123", &checkPoint); if (busca != NULL) { printf("Achou: %s", busca->cd); } else { printf("Não achou!"); } busca = buscaCD(f, "CD 111", &checkPoint); if (busca != NULL) { printf("\nAchou: %s", busca->cd); } else { printf("\nNão achou!"); } mostra(f); strcpy(novo.cd, "CD 666"); novo.excluido = 0; altera(f, "CD 123", novo); strcpy(novo.cd, "CD 777"); novo.excluido = 0; altera(f, "CD 111", novo); mostra(f); exclui(f, "CD 456"); exclui(f, "CD 456"); mostra(f); reorganiza(f); fclose(f); remove("arq.txt"); rename("auxx.txt", "arq.txt"); f=fopen("arq.txt", "rb"); mostra(f); fclose(f); return 0; } arrumei o código para um arquivo binário, da uma olhada pra ver se esta tudo ok ou poderia melhorar alguma coisa
-
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct musica { char cd[20]; int excluido; } MUSICA; void insere(FILE *f, MUSICA novo) { fprintf(f, "%s\n", novo.cd); fprintf(f, "%d\n", novo.excluido); } MUSICA *buscaCD(FILE *f, char cd[20], long *checkPoint, long *checkPoint2) { MUSICA *m = malloc(sizeof(MUSICA)); fseek(f, SEEK_SET, 0); while (!feof(f)) { *checkPoint = ftell(f); fscanf(f, "%19[^\n]%*c", m->cd); *checkPoint2 = ftell(f); fscanf(f, "%d", &m->excluido); if (strcmp(m->cd, cd) == 0) return m; } return NULL; } void altera(FILE *f, char busca[20], MUSICA alterado) { MUSICA *m; long checkPoint, checkPoint2; m = buscaCD(f, busca, &checkPoint, &checkPoint2); fseek(f, checkPoint, 0); if (m != NULL) { fprintf(f, "%s\n", alterado.cd); fprintf(f, "%d\n", alterado.excluido); printf("\nRegistro alterado!"); } else printf("\nRegistro inexistente!"); } void exclui(FILE *f, char busca[20]) { MUSICA *m; long checkPoint, checkPoint2; m = buscaCD(f, busca, &checkPoint, &checkPoint2); fseek(f, checkPoint2, 0); if (m != NULL && m->excluido == 0) { fprintf(f, "%d\n", 1); printf("\nRegistro apagado!"); } else printf("\nRegistro inexistente!"); } void reorganiza(FILE *f) { MUSICA m; FILE *g = fopen("auxx.txt", "w+"); fseek(f, SEEK_SET, 0); while (!feof(f)) { fscanf(f, "%19[^\n]%*c", m.cd); fscanf(f, "%d", &m.excluido); if (m.excluido == 0) { fprintf(g, "%s\n", m.cd); fprintf(g, "%d\n", m.excluido); } } fclose(g); } int main() { FILE *f = fopen("arq.txt", "w+"); MUSICA novo; MUSICA *busca; strcpy(novo.cd, "CD 123"); novo.excluido = 0; insere(f, novo); strcpy(novo.cd, "CD 456"); novo.excluido = 0; insere(f, novo); strcpy(novo.cd, "CD 789"); novo.excluido = 0; insere(f, novo); long checkPoint, checkPoint2; busca = buscaCD(f, "CD 123", &checkPoint, &checkPoint2); if (busca != NULL) { printf("Achou: %s", busca->cd); } else { printf("Não achou!"); } busca = buscaCD(f, "CD 111", &checkPoint, &checkPoint2); if (busca != NULL) { printf("\nAchou: %s", busca->cd); } else { printf("\nNão achou!"); } strcpy(novo.cd, "CD 666"); novo.excluido = 0; altera(f, "CD 123", novo); strcpy(novo.cd, "CD 777"); novo.excluido = 0; altera(f, "CD 111", novo); exclui(f, "CD 456"); exclui(f, "CD 456"); reorganiza(f); fclose(f); return 0; } criei um função de exclusão que só marca quando um item foi excluído e uma função pra reorganizar, que tira os dados excluidos, que esta duplicando os dados, o que poderia ser?
-
void altera(FILE *f, char busca[20], MUSICA alterado) { MUSICA m; fseek(f, SEEK_SET, 0); while (!feof(f)) { fscanf(f,"%19[^\n]%*c", m.cd); if (!strcmp(m.cd, busca)) { fprintf(f, "%s\n",alterado.cd); break; } } } como eu poderia fazer uma alteração direto no mesmo arquivo?
-
o que é o 19 e o *c?
-
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct musica { char cd[20]; } MUSICA; void insere(FILE *f, MUSICA novo) { fprintf(f, "%s\n", novo.cd); } MUSICA *buscaCD(FILE *f, char cd[20]) { MUSICA *m = malloc(sizeof(MUSICA)); fseek(f, SEEK_SET, 0); while (!feof(f)) { fread(m, sizeof(MUSICA), 1, f); if (strcmp(m->cd, cd) == 0) return m; } return NULL; } void altera(FILE *f, char busca[20], MUSICA alterado) { int ok = 0; MUSICA *m = malloc(sizeof(MUSICA)); fseek(f, SEEK_SET, 0); while (!feof(f) && ok == 0) { fread(m, sizeof(MUSICA), 1, f); if (!strcmp(m->cd, busca)) { ok = 1; fwrite(m, sizeof(MUSICA), 1, f); fclose(f); } } } int main() { FILE *f = fopen("arq.txt", "w+"); MUSICA novo; MUSICA *busca; strcpy(novo.cd, "CD 123"); insere(f, novo); strcpy(novo.cd, "CD 456"); insere(f, novo); strcpy(novo.cd, "CD 789"); insere(f, novo); rewind(f); char procura[20]; strcpy(procura, "CD 123"); busca = buscaCD(f, procura); if (busca != NULL) { printf("Achou: %s", busca->cd); } else { printf("Não achou!"); } busca = buscaCD(f, "CD 111"); if (busca != NULL) { printf("\nAchou: %s", busca->cd); } else { printf("\nNão achou!"); } rewind(f); strcpy(procura, "CD 123"); strcpy(novo.cd, "CD 666"); altera(f, procura, novo); fclose(f); return 0; } não estou conseguindo buscar um dado no arquivo
-
int main(){ float pe; float nota1; float nota2; float nota3; float peso1; float peso2; float peso3; pe=media(nota1, nota2, nota3, peso1, peso2, peso3); //esqueceu de mandar a referencia para a função média printf("Média ponderada: %.2f",pe); return 0; }
-
int matriz[5][5], vetor[5], soma[5]; int i,j; for(i=0;i<5;i++) soma[i]=0;//como vou usar o vetor soma como um acomulador deve-se zera-lo antes de uma operação for(i=0;i<5;i++){ for(j=0;j<5;j++){ soma[i]+=matriz[i][j];//soma a linha da matriz } soma[i]+=vetor[i];//soma a posição do vetor } ficaria assim...
-
-
Tipo de dado para alocar um número numa lse
Gabriel_Moro respondeu ao tópico de DoodohRafael em C/C#/C++
poste seu código para podermos visualizar o que esta ocorrendo... -
uso de ponteiro de struct dentro do strcmp
Gabriel_Moro respondeu ao tópico de Bruno Dixini em C/C#/C++
declarou a biblioteca? adicionado 17 minutos depois celula *esse=NULL; celula *aux=inicioLista; while(aux!=NULL && esse==NULL){ if(strcmp(palavra, aux->palavra)==0){ esse=aux; }else{ aux=aux->pox; } } return esse; eu faria esse tipo de busca assim... -
uso de ponteiro de struct dentro do strcmp
Gabriel_Moro respondeu ao tópico de Bruno Dixini em C/C#/C++
ficaria if (strcmp ( palavra, tmp -> palavra) == 0){ } -
como não há um limite para cargos use eles em uma lista encadeada, e os funcionários como um vetor de struct, em que cada nodo da lista de cargos terá uma lista em vetores dos funcionários
-
Como gravar apresentar uma função
Gabriel_Moro respondeu ao tópico de Mayara Mendes Galzo em C/C#/C++
tu não esta trabalhando corretamente com a matriz ------ os índices ficaria M [ i ] [ j ] lembre-se o valor que tu quer acessar, em uma matriz, esta localizado na linha i na coluna j dessa linha reveja os índices da matriz no teu código -
limpa o buffer na entrada do dado na memória, é usado junto ao scanf (o scanf exige que seja usado o fflush para evitar lixo da memória e eventuais bugs)
-
#include <stdio.h> #include <string.h> #include <locale.h> // biblioteca de local usada para chamar a setclocale no codigo int main (void) { setlocale(LC_ALL, "Portuguese"); // habilita a acentuação para o português char palavra [50]; //char letra; int tamanho=0,cont=0,i; /* Entrada de Dados */ printf ("Informe uma PALAVRA: "); fflush(stdin); scanf ("%s", palavra); /* Processamento de Dados */ tamanho = strlen (palavra); if (tamanho % 2 != 0) { for (i=0 ; i < tamanho ; i++) { //letra = palavra[i] ; if (palavra[i] != 'a' && palavra[i] != 'e' && palavra[i] != 'i' && palavra[i] != 'o' && palavra[i] != 'u') { cont = cont + 1; printf ("\nConsoantes da palavra: %c\n", palavra[i]); } } }else{ printf("Palavra par!"); } /* Saída de Dados */ printf ("\nA palavra %s possui %d consoantes", palavra, cont); return (0); } corrigi e mudei algumas coisas...
-
problema em armazenar valores em um vetor em c
Gabriel_Moro respondeu ao tópico de RuanQ17 em C/C#/C++
int a=12, b=34, i, v[b]; for(i=0;i<b;i++){ v[i]=a*i; } -
problema em armazenar valores em um vetor em c
Gabriel_Moro respondeu ao tópico de RuanQ17 em C/C#/C++
acho que tua maior duvida é referente a isso... acho que facilitaria se tu lesse como uma string de 4 posições, passando as 2 primeiras posições para uma variável auxiliar, e em seguida usando a função a=atoi(aux) para converte-la para int para a variável a, depois faça o mesmo para para as 2 ultimas posições
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