Jump to content

Guardar dados na struct


martinhocosta
 Share

Recommended Posts

gostaria de saber porque é que este codigo nao guarda dados na struct????? ?

#include<stdio.h>

#include<stdlib.h>

struct dados{

int ano[32];

int semestre[32];

char curso[50][92];

char unidadeCurricular[50][92];

int t[32],tp[32],pl[32],tc[32],s[32],ot[32],e[32];

}d;

void funcao()

{

    int i;

    FILE *op;

    op=fopen ("dados_ucs_070410.txt", "r");

    if (op==NULL)

    {

                  printf("\n\n\n\t\tO ficheiro nao foi aberto");

    }

    else

    {

        for (i=0;i<92;i++)

        {

            fscanf(op, "\n%s",& d.curso);

            printf("%s", d.curso);

        }

        fclose(op);

    }

}

int main()

{

    funcao();

    system("pause");

}

Link to comment
Share on other sites

Tens dentro da struct que definiste um campo *char curso[50][92]*, ou seja, uma matriz com 50 strings que podem comportar 92 caracteres. Depois, pelo que vejo, tu queres ler para essas strings todas. Então fazes um loop (que por acaso está mal feito, *i* devia de incrementar até 50 e não 92) e depois utilizas a função *fscanf* para ler para cada uma dessas strings. No entanto, não estás a indexar, ou seja, o loop não está a servir para nada. Tens de indexar essa matriz para leres para a string que estás a percorrer no momento.

edit: @Strabush, isso está errado.

edit2: Por favor, volta a postar porque parece que fiquei a falar sozinho.

here since 2009

Link to comment
Share on other sites

Isso está errado porque assim estás a aceder à i-ésima string e ao seu i-ésimo caracter. Neste caso não resultaria num buffer overflow porque o número strings é menor do que o número de caracteres que cada string pode comportar senão estarias a aceder a memória indevida.

here since 2009

Link to comment
Share on other sites

Se o número de strings for maior do que o número de caracteres que as strings podem comportar e se acederes da maneira como estavas a aceder vai originar um buffer overflow. Podes experimentar.

No meu último post enganei-me, era menor em vez de maior, já editei.

here since 2009

Link to comment
Share on other sites

Tenho a mesma duvida que o martinhocosta...

Só que tenho o codigo um pouco diferente, tenho um vector de estruturas e não os campos das estruturas sendo vectores...

Estrutura:

typedef struct dados
{
char curso[50], nomeuc[50], doc_res[50], area_cientifica[50];
float t, tp, pl, p, ac, ot, s, turm_t,turm_tp, turm_p, turm_pl, turm_ac, turm_ot, turm_s, docentes;
int ects, opcional, ano, semestre;
} DADOS;

Função para ler os dados:

void ler_dados_fich(DADOS *uc, int num)
{
char cabecalho[1000];
int i=0;
FILE *pfdados;

pfdados=fopen("dados_ucs_070410.txt","r");

if(pfdados==NULL)
{
	printf("Erro ao abrir o ficheiro! \n");
	system("pause");
}

fscanf(pfdados,"[^\n]\n",cabecalho);
//printf("%s\n",cabecalho);

for (i=0;i<num;i++)
    {
	fscanf( pfdados , "[^\t]\t%d\t%d\t%[^\t]\t%d\t%[^\t]\t%d\t%[^\t]\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f",uc[i].curso,&uc[i].ano,&uc[i].semestre,uc[i].nomeuc,&uc[i].ects,uc[i].area_cientifica,&uc[i].opcional,uc[i].doc_res,&uc[i].docentes,&uc[i].turm_t,&uc[i].turm_tp,&uc[i].turm_p,&uc[i].turm_pl,&uc[i].turm_ac,&uc[i].turm_ot,&uc[i].turm_s,&uc[i].t,&uc[i].tp,&uc[i].p,&uc[i].pl,&uc[i].ac,&uc[i].ot,&uc[i].s);
}
fclose(pfdados);
}

Devo referir que o vector esta definido assim no main: 

DADOS uc[N];

. Sendo o N = 92...

Codigo completo aqui-> http://www.pastie.org/959481

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.