Jump to content
Sign in to follow this  
mandelacruz

Dúvida em C

Recommended Posts

24 minutes ago, mandelacruz said:

Olá, estou estudando programação em C e me surgiu uma dúvida ao tentar ler um arquivo binário.


#include <stdio.h>
#include <stdlib.h>

typedef struct {
    long int numero;
    char nome[100];
}addr;

addr teste = {70707070, "testando"};

void main(){
    FILE *p;
    p = fopen("teste", "wb");
    if(p == NULL){
        printf("ERROO");
        exit(1);
    }
    fwrite(&teste,sizeof(addr),1,p);
    fclose(p);
}

Nesse exemplo,criei um arquivo binário e passei o conteúdo dessa struct para ele.

Minha duvida é se existe alguma maneira de ler apenas um campo dessa struct no arquivo binário, por exemplo, só o campo numero?

Espero que seja respondido kkk, obrigado!!!

 

Share this post


Link to post
Share on other sites

Entao dei um "echo "70707070testando > teste" e o codigo fica assim:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
			int numero;
		    char nome[100];
}addr;
// coloquei um valorzinho default pra debugar
addr teste = {0, " "};

int main(void){
	FILE *p;
	p = fopen("teste", "r");
	if(p == NULL){
		printf("ERROO");
		exit(1);
	}
	// parenteses opcionais
	fscanf(p,"%d%s" , &(teste.numero), &teste.nome);

	printf("%u\n", teste.numero);
	puts(teste.nome);
	fclose(p);
    return 0;
}

Espero que ajude

Share this post


Link to post
Share on other sites

Não man, o que você fez foi ler o conteúdo de um arquivo texto.

A minha duvida é se é possivel fazer a leitura de apenas um campo de uma struct que está em um arquivo BINÁRIO.

Mas obrigado por tentar ajudar.

Share this post


Link to post
Share on other sites
Posted (edited)

Pois e percebi isso assim que postei

#include <stdio.h>
#include <stdlib.h>

typedef struct {
			long int numero;
		    char nome[100];
}addr;

void main(){
	addr teste = {0, "default"};
	FILE *p;
	p = fopen("teste", "rb");
	if(p == NULL){
		printf("ERROO");
		exit(1);
	}
	int i = fread( &teste, sizeof(addr), 1, p);
	printf("read: %lu\n", teste.numero);
	puts(teste.nome);
	printf("%zu\n", sizeof(long int) );
	fclose(p);
}

espero que ajude.

Edited by Marioh
errei o printf

Share this post


Link to post
Share on other sites

pior que consegui de uma forma parecida com essa sua '-'.

pior ainda que eu tinha testado essa forma ontem e nao tava dando certo, por isso vim perguntar aqui, mas acho que por engano devo ter aberto o arquivo no modo "wb" sendo que queria ler, dai tava dando um numero aleatório... Mas enfim o importante é aprender uahsuahsua.

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    long int numero;
}addr;

addr teste;

void main(){
    FILE *p = fopen("teste", "rb");
    if(p == NULL){
        printf("ERRO");
        exit(1);
    }
    fread(&teste,sizeof(addr),1,p);
    fclose(p);
    printf("Numero: %ld\n", teste.numero);
}

Cara eu juro que fiz dessa forma ontem e nao estava pegando,eu devia estar muito cansado ja de tanto ler.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...