Programação II
 EXEMPLOS DE CÓDIGO C Filipe Pacheco 1999/2000 

Exemplo 1:

Apresentar o conteúdo de um ficheiro de texto assinalando as linhas que contenham o texto "printf". Indicar também o número total de linhas e o número de linhas com "printf".

#include 
#include 

#define MAX_BUF 120

int main(int argc, char* argv[])
{
	FILE *f;
	int n1=0;
	int n2=0;
	char filename[80];
	char buf[MAX_BUF];

	printf("Indique nome do ficheiro:");
	gets(filename);

	f=fopen(filename,"r");
	if (f==NULL) 
	{
		printf("Erro na abertura do ficheiro");
		return 1;
	}
	while (! feof(f)) 
	{
		fgets(buf,MAX_BUF, f);
		n1++;
		if (strstr(buf, "printf")>0) {
			n2++;
			printf("> %s", buf);
		}
		else
			printf("* %s", buf);
	}
	fclose(f);
	printf("\n\nO ficheiro tem %d linhas, das quais %d com \"printf\"\n",n1,n2);
	return 0;
}

Exemplo 2:

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 axrescentar 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;
}
Topo