a) Defina uma estrutura com o nome, ano de matrícula, curso e média de entrada de um aluno. b) Faça uma função de recebe como parâmetro um apontador para uma estrutura do tipo definido e cria dinamicamente uma nova estrutura. Para a nova estrutura devem ser copiados os dados da estrutura recebida. A função retorna o apontador para a nova estrutura ou NULL caso não consiga reservar memória. c) Faça uma função que recebe como parâmetro um apontador para uma estrutura do tipo definido e o nome de um ficheiro de texto. A função deve acrescentar uma linha ao ficheiro com a informação da estrutura.



#include
#include

#define MAX_BUF 120

/* a) */
typedef struct aluno {
char nome[40];
int ano;
char curso[40];
float media;
} aluno;


/* b) */
aluno * copia_aluno( aluno * a)
{
aluno *t;

t=(aluno *)malloc(sizeof(aluno));
if (t==NULL)
return t;

*t = *a;
/* ou:
strcpy(t->nome,a->nome);
t->ano = a->ano;
strcpy(t->curso,a->curso);
t->media = a->media;
*/

return t;
}


/* c) */
void guarda_aluno( aluno * a, char * filename)
{
FILE *f;

if (a==NULL) return;

f = fopen(filename,"a");
if (f==NULL) return;

fprintf(f, "%s\t%d\t%s\t%f\n",a->nome,a->ano,a->curso,a->media);

fclose(f);
}

/* exemplo */

void mostra_aluno(aluno * a)
{
if (a==NULL) return;
printf("\nnome:%s\nano:%d\ncurso:%s\nmedia:%f\n",a->nome,a->ano,a->curso,a->media);
}

void mostra_ficheiro(char * filename)
{
FILE *f;
char buf[MAX_BUF];

f = fopen(filename,"r");
if (f==NULL)
{
printf("\nErro na abertura do ficheiro \"%s\"!\n", filename);
return;
}

printf("\nFicheiro \"%s\"\n", filename);

fgets(buf, MAX_BUF, f);
while (!feof(f))
{
printf("%s",buf);
fgets(buf, MAX_BUF, f);
}

fclose(f);
}


int main(int argc, char* argv[])
{
aluno a1 = {"Paulo Silva", 1999, "EI", 14.2F};
aluno a2 = {"Ricardo Malheiro", 1998, "EEC", 12.8F};
aluno a3 = {"Paula Oliveira", 1999, "SE", 15.1F};

aluno * at;

printf("\nAlunos:\n");

mostra_aluno(&a1);
mostra_aluno(&a2);
mostra_aluno(&a3);
printf("\nFicheiro Inicial:\n");
mostra_ficheiro("teste.txt");

printf("\nCópia 1:\n");
at = copia_aluno(&a1);
mostra_aluno(at);
guarda_aluno(at,"teste.txt");
printf("\nCópia 2:\n");
at = copia_aluno(&a2);
mostra_aluno(at);
guarda_aluno(at,"teste.txt");
printf("\nFicheiro Final:\n");
mostra_ficheiro("teste.txt");

return 0;

}

Nenhum comentário:

Postar um comentário