Ir para o conteúdo
waza

Opiniao para melhoramento !

Mensagens Recomendadas

waza

aqui fica o meu codigo de um programa que ser para registar as informaçoes de alunos, para apenas uma disciplina !

dêm opinioes de modo a melhorar o programa !

a identação nao esta muito boa, pois nao me preocupei muito com isso

//
//  main.c
//  dbSIMPLES
//
//  Created by Luis Rodrigues on 5/9/13.
//  Copyright © 2013 Luis Rodrigues. All rights reserved.
//
//  Base de dados simples para alunos, apenas uma turma
//
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
//structures
typedef struct
{
float teste1,teste2,media;

}TESTES;
typedef struct alunos
{
char nome[100];
int numero;
int idade;
char data_nasc[11];
char contacto[14];
char enc_ed[100];
char sexo;
TESTES notas;
}aluno;
//protos
void menu();
void inserir();
void mostrar();
void mostrar_um();
void mostrar_todos();
void alterar();
void alterar_nome();
void alterar_idade();
void alterar_data_nasc();
void alterar_sexo();
void alterar_enc_ed();
void alterar_contacto();
void alterar_teste1();
void alterar_teste2();
// var
FILE * fp;
int last = 0;
aluno v[10000], ler, change;
//rest
int main(int argc, const char * argv[])
{
printf("*********************************\n");
printf("** BEM VINDO AO PROGRAMA turma **\n");
printf("*********************************\n\n");
menu();
return 0;
}
void menu()
{
char op,op2;
do
{
do
{
	printf("\tMENU:\n");
	printf("1 : inserir alunos;\n");
	printf("2 : mostrar alunos;\n");
	printf("3 : alterar alunos;\n");
	printf("0 : sair;\n\n");
	rewind(stdin);
	printf("A sua escolha -> "); op = getchar();
}
while ((op != '1') && (op!= '2') && (op!='3') && (op!='0'));
switch (op)
{
	case '1': inserir(); break;
	case '2': mostrar(); break;
	case '3': alterar(); break;
	case '0': printf("\nSAIU DO PROGRAMA, ATÉ BREVE!!");
				exit(1);
}

printf("Deseja mais alguma tarefa do menu principal? [s/N] "); rewind(stdin); op2 = getchar();
}
while(toupper(op2)!= 'N') ;

}
void alterar()
{
int op;
char op2,op3;
do
{
do
{
	printf("*********************************\n");
	printf("**		  MENU ALTERAR	   **\n");
	printf("*********************************\n\n");
	printf("\tMENU:\n");
	printf(" INFORMAÇÔES BASICAS\n");
	printf("1 : Alterar o nome;\n");
	printf("2 : Alterar a idade;\n");
	printf("3 : Alterar a data de nascimento;\n");
	printf("4 : Alterar o sexo;\n");
	printf("5 : Alterar o encarregado de educação;\n");
	printf("6 : Alterar o contacto;\n");
	printf(" INFORMAÇÕES DA DISCIPLINA\n");
	printf("7 : Alterar nota do teste 1;\n");
	printf("8 : Alterar nota do teste 2;\n");
	printf("0 : Sair;\n\n");
	rewind(stdin);
	printf("A sua escolha -> "); scanf("%d", &op);
	printf("Escolheu a opção \"%d\"... Deseja prosseguir? [s/N]",op);
	rewind(stdin);
	op3 = getchar();
}
while ((op<0) || (op>8));

switch (op)
{
	case 1: alterar_nome(); break;
	case 2: alterar_idade(); break;
	case 3: alterar_data_nasc(); break;
	case 4: alterar_sexo();break;
	case 5: alterar_enc_ed();break;
	case 6: alterar_contacto();break;
	case 7: alterar_teste1();break;
	case 8: alterar_teste2();break;
	default: break;
}
if (op == 0)
	op2 = 'N';
else
	printf("Deseja mais alguma tarefa? [s/N] "); rewind(stdin); op2 = getchar();
}
while (toupper(op2) == 'S');
}
void alterar_teste1()
{
int op;
char op2;
long nalunos;
if ((fp = fopen("DADOS.dat", "r+b")) == NULL)
	printf("Erro ao abrir ficheiro\n");
else
{
	fseek(fp, 0, SEEK_END);
	nalunos = ftell(fp) / sizeof(aluno);
	printf("ALTERAR O TESTE 1... NUMERO DE ALUNOS -> %ld \n\n", nalunos);

	do
	{
		printf("Insira o numero do aluno -> ");
		scanf("%d", &op);
		rewind(stdin);
		// MUITO IMPORTANTE !!!
		// VALIDAR A SELECÇÃO !!!
		if (op == 0 || op > nalunos) {
			op2 = 'N';
		} else {
			fseek(fp, sizeof(aluno)*(op-1), SEEK_SET);
			fread(&ler, sizeof(aluno), 1, fp);

			printf("Escolheu o aluno \"%s\"... continuar? [s/N]", ler.nome );
			op2 = getchar();
		}
	} while (toupper(op2)!='S');
	rewind(stdin);
	printf("Insira a nota para substituir \"%f\" -> ", ler.notas.teste1);
	fscanf(stdin, "%f", &ler.notas.teste1);
	ler.notas.media = (ler.notas.teste1 + ler.notas.teste2) / 2;
	fseek(fp, sizeof(aluno) * (op - 1), SEEK_SET);

	if(fwrite(&ler, sizeof(aluno), 1, fp) != 1)
		printf("ERRO A ESCREVER\n\n");
	else
		printf("Nota do teste 1 e media alterado com sucesso\n\n");

	fclose (fp);
}
}
void alterar_teste2()
{
int op;
char op2;
long nalunos;
if ((fp = fopen("DADOS.dat", "r+b")) == NULL)
	printf("Erro ao abrir ficheiro\n");
else
{
	fseek(fp, 0, SEEK_END);
	nalunos = ftell(fp) / sizeof(aluno);
	printf("ALTERAR O TESTE 2... NUMERO DE ALUNOS -> %ld \n\n", nalunos);

	do
	{
		printf("Insira o numero do aluno -> ");
		scanf("%d", &op);
		rewind(stdin);
		// MUITO IMPORTANTE !!!
		// VALIDAR A SELECÇÃO !!!
		if (op == 0 || op > nalunos) {
			op2 = 'N';
		} else {
			fseek(fp, sizeof(aluno)*(op-1), SEEK_SET);
			fread(&ler, sizeof(aluno), 1, fp);

			printf("Escolheu o aluno \"%s\"... continuar? [s/N]", ler.nome );
			op2 = getchar();
		}
	} while (toupper(op2)!='S');
	rewind(stdin);
	printf("Insira a nota para substituir para substituir \"%f\" -> ", ler.notas.teste2);
	fscanf(stdin, "%f", &ler.notas.teste2);
	ler.notas.media = (ler.notas.teste1 + ler.notas.teste2) / 2;

	fseek(fp, sizeof(aluno) * (op - 1), SEEK_SET);

	if(fwrite(&ler, sizeof(aluno), 1, fp) != 1)
		printf("ERRO A ESCREVER\n\n");
	else
		printf("Nota Teste 2 e media alterado com sucesso\n\n");

	fclose (fp);
}
}
void alterar_contacto()
{
int op;
char op2;
long nalunos;
if ((fp = fopen("DADOS.dat", "r+b")) == NULL)
	printf("Erro ao abrir ficheiro\n");
else
{
	fseek(fp, 0, SEEK_END);
	nalunos = ftell(fp) / sizeof(aluno);
	printf("ALTERAR O CONTACTO DE ALUNO... NUMERO DE ALUNOS -> %ld \n\n", nalunos);

	do
	{
		printf("Insira o numero do aluno -> ");
		scanf("%d", &op);
		rewind(stdin);
		// MUITO IMPORTANTE !!!
		// VALIDAR A SELECÇÃO !!!
		if (op == 0 || op > nalunos) {
			op2 = 'N';
		} else {
			fseek(fp, sizeof(aluno)*(op-1), SEEK_SET);
			fread(&ler, sizeof(aluno), 1, fp);

			printf("Escolheu o aluno \"%s\"... continuar? [s/N]", ler.nome );
			op2 = getchar();
		}
	} while (toupper(op2)!='S');
	rewind(stdin);
	printf("Insira o contacto para substituir \"%s\" -> ", ler.contacto);
	fgets(ler.contacto, 100, stdin);
	ler.contacto[strlen(ler.contacto)-1] = '\0';
	fseek(fp, sizeof(aluno) * (op - 1), SEEK_SET);

	if(fwrite(&ler, sizeof(aluno), 1, fp) != 1)
		printf("ERRO A ESCREVER\n\n");
	else
		printf("Contacto alterado com sucesso\n\n");

	fclose (fp);
}
}
void alterar_enc_ed()
{
int op;
char op2;
long nalunos;
if ((fp = fopen("DADOS.dat", "r+b")) == NULL)
	printf("Erro ao abrir ficheiro\n");
else
{
	fseek(fp, 0, SEEK_END);
	nalunos = ftell(fp) / sizeof(aluno);
	printf("ALTERAR ENCARREGADO DE EDUCAÇÃO DE ALUNO... NUMERO DE ALUNOS -> %ld \n\n", nalunos);

	do
	{
		printf("Insira o numero do aluno -> ");
		scanf("%d", &op);
		rewind(stdin);
		// MUITO IMPORTANTE !!!
		// VALIDAR A SELECÇÃO !!!
		if (op == 0 || op > nalunos) {
			op2 = 'N';
		} else {
			fseek(fp, sizeof(aluno)*(op-1), SEEK_SET);
			fread(&ler, sizeof(aluno), 1, fp);

			printf("Escolheu o aluno \"%s\"... continuar? [s/N]", ler.nome );
			op2 = getchar();
		}
	} while (toupper(op2)!='S');
	rewind(stdin);
	printf("Insira o nome do encarregado de educalão para substituir \"%s\" -> ", ler.enc_ed);
	fgets(ler.enc_ed, 100, stdin);
	ler.enc_ed[strlen(ler.enc_ed)-1] = '\0'; // remover o \n do fgets

	fseek(fp, sizeof(aluno) * (op - 1), SEEK_SET);

	if(fwrite(&ler, sizeof(aluno), 1, fp) != 1)
		printf("ERRO A ESCREVER\n\n");
	else
		printf("Nome do EE alterado com sucesso\n\n");

	fclose (fp);
}
}

void alterar_sexo()
{
int op;
char op2;
long nalunos;
if ((fp = fopen("DADOS.dat", "r+b")) == NULL)
	printf("Erro ao abrir ficheiro\n");
else
{
	fseek(fp, 0, SEEK_END);
	nalunos = ftell(fp) / sizeof(aluno);
	printf("ALTERAR O SEXO DE ALUNO... NUMERO DE ALUNOS -> %ld \n\n", nalunos);

	do
	{
		printf("Insira o numero do aluno -> ");
		scanf("%d", &op);
		rewind(stdin);
		// MUITO IMPORTANTE !!!
		// VALIDAR A SELECÇÃO !!!
		if (op == 0 || op > nalunos) {
			op2 = 'N';
		} else {
			fseek(fp, sizeof(aluno)*(op-1), SEEK_SET);
			fread(&ler, sizeof(aluno), 1, fp);

			printf("Escolheu o aluno \"%s\"... continuar? [s/N]", ler.nome );
			op2 = getchar();
		}
	} while (toupper(op2)!='S');
	rewind(stdin);
	printf("Insira o sexo para substituir \"%c\" -> ", ler.sexo);
	ler.sexo = getchar();

	fseek(fp, sizeof(aluno) * (op - 1), SEEK_SET);

	if(fwrite(&ler, sizeof(aluno), 1, fp) != 1)
		printf("ERRO A ESCREVER\n\n");
	else
		printf("Sexo alterado com sucesso\n\n");

	fclose (fp);
}
}
void alterar_data_nasc()
{
int op;
char op2;
long nalunos;
if ((fp = fopen("DADOS.dat", "r+b")) == NULL)
	printf("Erro ao abrir ficheiro\n");
else
{
	fseek(fp, 0, SEEK_END);
	nalunos = ftell(fp) / sizeof(aluno);
	printf("ALTERAR DATA DE NASCIMENTO DE ALUNO... NUMERO DE ALUNOS -> %ld \n\n", nalunos);

	do
	{
		printf("Insira o numero do aluno -> ");
		scanf("%d", &op);
		rewind(stdin);
		// MUITO IMPORTANTE !!!
		// VALIDAR A SELECÇÃO !!!
		if (op == 0 || op > nalunos) {
			op2 = 'N';
		} else {
			fseek(fp, sizeof(aluno)*(op-1), SEEK_SET);
			fread(&ler, sizeof(aluno), 1, fp);

			printf("Escolheu o aluno \"%s\"... continuar? [s/N]", ler.nome );
			op2 = getchar();
		}
	} while (toupper(op2)!='S');
	rewind(stdin);
	printf("Insira a data de nascimento para substituir \"%s\" -> ", ler.data_nasc);
	fgets(ler.data_nasc, 100, stdin);
	ler.data_nasc[strlen(ler.data_nasc)-1] = '\0'; // remover o \n do fgets

	fseek(fp, sizeof(aluno) * (op - 1), SEEK_SET);

	if(fwrite(&ler, sizeof(aluno), 1, fp) != 1)
		printf("ERRO A ESCREVER\n\n");
	else
		printf("Data de nascimento alterado com sucesso\n\n");

	fclose (fp);
}
}
void alterar_nome()
{
int op;
char op2;
long nalunos;
if ((fp = fopen("DADOS.dat", "r+b")) == NULL)
	printf("Erro ao abrir ficheiro\n");
else
{
	fseek(fp, 0, SEEK_END);
	nalunos = ftell(fp) / sizeof(aluno);
	printf("ALTERAR NOME DE ALUNO... NUMERO DE ALUNOS -> %ld \n\n", nalunos);

	do
	{
		printf("Insira o numero do aluno -> ");
		scanf("%d", &op);
		rewind(stdin);
		// MUITO IMPORTANTE !!!
		// VALIDAR A SELECÇÃO !!!
		if (op == 0 || op > nalunos) {
			op2 = 'N';
		} else {
			fseek(fp, sizeof(aluno)*(op-1), SEEK_SET);
			fread(&ler, sizeof(aluno), 1, fp);

			printf("Escolheu o aluno \"%s\"... continuar? [s/N]", ler.nome );
			op2 = getchar();
		}
	} while (toupper(op2)!='S');
	rewind(stdin);
	printf("Insira o nome para substituir \"%s\" -> ", ler.nome);
	fgets(ler.nome, 100, stdin);
	ler.nome[strlen(ler.nome)-1] = '\0'; // remover o \n do fgets

	fseek(fp, sizeof(aluno) * (op - 1), SEEK_SET);

	if(fwrite(&ler, sizeof(aluno), 1, fp) != 1)
		printf("ERRO A ESCREVER\n\n");
	else
		printf("Nome alterado com sucesso\n\n");

	fclose (fp);
}
}
void alterar_idade()
{
int op;
char op2;
long nalunos;
if ((fp = fopen("DADOS.dat", "r+b")) == NULL)
	printf("Erro ao abrir ficheiro\n");
else
{
	fseek(fp, 0, SEEK_END);
	nalunos = ftell(fp) / sizeof(aluno);
	printf("ALTERAR IDADE DE ALUNO... NUMERO DE ALUNOS -> %ld \n\n", nalunos);

	do
	{
		printf("Insira o numero do aluno -> ");
		scanf("%d", &op);
		rewind(stdin);
		// MUITO IMPORTANTE !!!
		// VALIDAR A SELECÇÃO !!!
		if (op == 0 || op > nalunos) {
			op2 = 'N';
		} else {
			fseek(fp, sizeof(aluno)*(op-1), SEEK_SET);
			fread(&ler, sizeof(aluno), 1, fp);

			printf("Escolheu o aluno \"%s\"... continuar? [s/N]", ler.nome );
			op2 = getchar();
		}
	} while (toupper(op2)!='S');
	rewind(stdin);
	printf("Insira a idade para substituir \"%d\" -> ", ler.idade);
	fscanf(stdin, "%d", &ler.idade);

	fseek(fp, sizeof(aluno) * (op - 1), SEEK_SET);

	if(fwrite(&ler, sizeof(aluno), 1, fp) != 1)
		printf("ERRO A ESCREVER\n\n");
	else
		printf("Idade alterado com sucesso\n\n");

	fclose (fp);
}
}
void mostrar()
{
int op;
char op2,op3;
printf("*********************************\n");
printf("**		  MENU MOSTRAR	   **\n");
printf("*********************************\n\n");
do
{
	rewind(stdin);
	printf("\tMENU:\n");
	printf("1 : Mostrar todos os alunos da turma;\n");
	printf("2 : Mostrar um aluno especifico (numero de turma);\n");
	printf("0 : Sair;\n");
	putchar('\n');
		do
		{
			printf("A sua escolha -> "); scanf("%d", &op);
			printf("Escolheu a opção \"%d\"... Deseja prosseguir? [s/N]",op);
			rewind(stdin);
			op3 = getchar();
		}
	while (toupper(op3)!= 'S');

	switch (op)
	{
		case 1: mostrar_todos(); break;
		case 2: mostrar_um(); break;
		case 0: return;
		default: break;
	}
	if (op == 0)
		op2 = 'N';
	else
		printf("Deseja mais alguma tarefa? [s/N] "); rewind(stdin); op2 = getchar();


}
while (toupper(op2) == 'S');

}
void mostrar_um()
{
char M[] = {"Masculino"};
char F[] = {"Feminino"};
int op;
int succ;
fp= fopen("DADOS.dat", "rb");
printf("\t*************************************\n");
printf("\t**  MENU MOSTRAR DETERMINADO ALUNO **\n");
printf("\t*************************************\n\n");
fseek(fp, 0, SEEK_END);
printf("Que aluno pretende consultar? 1 -> %ld : ", ftell(fp)/sizeof(aluno));
rewind(fp);
rewind(stdin);
scanf("%d", &op);
fseek(fp, sizeof(aluno)*(op-1), SEEK_SET);
succ = fread(&ler, sizeof(aluno), 1, fp);
if(succ == 1)
{
	printf(" INICIO DE LEITURA DO ALUNO NUMERO -> %d \n\n", ler.numero);
	printf("\tINFORMAÇÕES BASICAS\n");
	printf("Numero : %d\n", ler.numero);
	printf("Nome : %s\n",ler.nome);
	printf("Idade : %d\n", ler.idade);
	if (toupper(ler.sexo) == 'F')
		printf("Sexo : %c (%s)\n", ler.sexo, F);
	else
		printf("Sexo : %c (%s)\n", ler.sexo, M);
	printf("Data de nascimento : %s\n", ler.data_nasc);
	printf("Encarregado de Educação : %s\n", ler.enc_ed);
	printf("Contacto : %s\n\n", ler.contacto);
	printf("\tINFORMAÇÕES DA DISCIPLINA\n");
	printf("Nota do teste 1 : %.2f\n", ler.notas.teste1);
	printf("Nota do teste 2 : %.2f\n", ler.notas.teste2);
	printf("Medias dos testes : %.2f\n\n", ler.notas.media);
	printf(" FIM DE LEITURA DO ALUNO NUMERO -> %d\n\n", ler.numero);
}
else
	printf("Aluno INEXISTENTE ou ERRO A ECONTRAR\n\n");
fclose(fp);
}
void mostrar_todos()
{
char M[] = {"Masculino"};
char F[] = {"Feminino"};
fp= fopen("DADOS.dat", "rb");
printf("\t*********************************\n");
printf("\t**	 MENU MOSTRAR TODOS	  **\n");
printf("\t*********************************\n\n");

while (fread(&ler, sizeof(aluno), 1, fp) != 0)
{

	printf(" INICIO DE LEITURA DO ALUNO NUMERO -> %d \n\n", ler.numero);
	printf("\tINFORMAÇÕES BASICAS\n");
	printf("Numero : %d\n",ler.numero);
	printf("Nome : %s\n",ler.nome);
	printf("Idade : %d\n", ler.idade);
	if (toupper(ler.sexo) == 'F')
		printf("Sexo : %c (%s)\n", ler.sexo, F);
	else  
		printf("Sexo : %c (%s)\n", ler.sexo, M);
	printf("Data de nascimento : %s\n", ler.data_nasc);
	printf("Encarregado de Educação : %s\n", ler.enc_ed);
	printf("Contacto : %s\n\n", ler.contacto);
	printf("\tINFORMAÇÕES DA DISCIPLINA\n");
	printf("Nota do teste 1 : %.2f\n", ler.notas.teste1);
	printf("Nota do teste 2 : %.2f\n", ler.notas.teste2);
	printf("Medias dos testes : %.2f\n\n", ler.notas.media);
	printf(" FIM DE LEITURA DO ALUNO NUMERO -> %d\n\n", ler.numero);
}
fclose(fp);
}

void inserir()
{
int op;
char op2;
unsigned int len;
long int quantos, i;
printf("*********************************\n");
printf("**		  MENU INSERIR	   **\n");
printf("*********************************\n\n");
do {
	rewind(stdin);
	printf("Quantos alunos deseja inserir? -> "); fscanf(stdin, "%d", &op);
	putchar('\n');
	rewind(stdin);
	printf("Escolheu inserir %d alunos... continuar? [s/N] ", op);
	op2=getchar();
} while (toupper(op2) != 'S');

rewind(stdin);
fp = fopen("DADOS.dat", "a+b");
quantos = ftell(fp)/sizeof(aluno);
printf(" tem %ld registos no ficheiro\n\n", quantos);
quantos+=1;
for (i=quantos; i<quantos+op; i++)
{
	printf(" INFORMAÇÕES BASICAS DO ALUNO \n\n");
	v[i].numero = i; rewind(stdin);
	printf("Insira o nome do aluno numero \"%d\" -> ", v[i].numero);
	fgets(v[i].nome, 100, stdin);
	v[i].nome[strlen(v[i].nome)-1]= '\0';
	rewind(stdin);

	printf("Insira a idade do aluno ->  \"%s\" -> ", v[i].nome);
	fscanf(stdin, "%d", &v[i].idade);rewind(stdin);

	printf("Insira a data de nascimento do aluno ->  \"%s\" -> ", v[i].nome);
	fscanf(stdin, "%s", v[i].data_nasc);
	v[i].data_nasc[strlen(v[i].data_nasc)-1]= '\0';
	rewind(stdin);

	printf("Insira o sexo do aluno ->  \"%s\" -> ", v[i].nome);
	fscanf(stdin, "%c", &v[i].sexo);rewind(stdin);

	printf("Insira o contacto do aluno ->  \"%s\" -> ", v[i].nome);
	fscanf(stdin, "%s", v[i].contacto);rewind(stdin);
	v[i].contacto[strlen(v[i].data_nasc)-1]= '\0';

	printf("Insira o encarregado de educ do aluno ->  \"%s\" -> ", v[i].nome);
	fgets(v[i].enc_ed, 100, stdin);
	v[i].enc_ed[strlen(v[i].enc_ed)-1] = '\0';
	rewind(stdin);

	putchar('\n');
	printf(" INFORMAÇÕES SOBRE OS TESTES DA DISCIPLINA !! \n");
	printf("Insira a nota do teste 1 do aluno -> %s ", v[i].nome);
	scanf("%f", &v[i].notas.teste1);

	printf("Insira a nota do teste 2 do aluno -> %s ", v[i].nome);
	scanf("%f", &v[i].notas.teste2);

	putchar('\n');
	printf(" INSERÇÃO CONCLUIDA !!!\n\n ");
	v[i].notas.media = (v[i].notas.teste1+v[i].notas.teste2) / 2;
	fwrite(&v[i], sizeof(aluno), 1, fp);
}
fclose(fp);
}

Editado por waza

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg
void menu();
void inserir();
void mostrar();
void mostrar_um();
void mostrar_todos();
void alterar();
void alterar_nome();
void alterar_idade();
void alterar_data_nasc();
void alterar_sexo();
void alterar_enc_ed();
void alterar_contacto();
void alterar_teste1();
void alterar_teste2();

Xiiii ...

nenhuma das tuas funcoes devolve um valor?

nenhuma delas recebe parametros?

Isto é muito ma pratica de programacao!

Ve la se consegues fazer funcoes "mais normais".

// var
FILE * fp;
int last = 0;
aluno v[10000], ler, change;

Variaveis globais?

Outra ma pratica de programacao.

Ve la se consegues fazer o programa sem uma unica variavel global.

O uso de parametros e valores de retorno de funcoes serve (entre outras coisas) para evitar usar variaveis globais.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
waza

hum, nao sabia ...

porquê que usar imensas voids e variaveis globais é uma má pratica?

vou ver o que consigo melhorar nesse aspecto, obrigado :D

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

Tenho a ideia que o rewind(stdin); não é uma forma muito portável de limpar o buffer.

Variaveis globais?

Outra ma pratica de programacao.

De certa forma, é a mesma má prática :D

Quando não usas parâmetros, tens que arranjar outra forma de comunicar input e outputs.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

porquê que usar variaveis globais é uma má pratica?

Ve em http://c2.com/cgi/wiki?GlobalVariablesAreBad

Quanto as funcoes que nao devolvem valor nem recebem parametros talvez eu estivesse a exagerar um bocadinho. Mas olhei para aquele grupo de codigo e nao gostei nada. Uma funcao, sempre que e chamada deve fazer a mesma coisa (senao deixa-se de confiar na funcao).

Imagina por exemplo a funcao que calcula a raiz quadrada (sqrt). Se ela fosse void sqrt(); tinha que se usar variaveis globais para achar raizes quadradas

input = 100; sqrt(); printf("resultado: %f\n", output);
input = 16; sqrt(); printf("resultado: %f\n", output);

Compara com

printf("resultado: %f\n", sqrt(100));
printf("resultado: %f\n", sqrt(16));


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
waza

so utilizei assim pois acho que se tornava mais pratico :P

o problema é que se eu nao usasse globais teria que usar pointers e eu nao domino muito bem esse aspecto (por equanto) :/

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

separa o código de apresentação de dados (seja menu ou uma estrutura) e o código de manipulação de dados


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

o problema é que se eu nao usasse globais teria que usar pointers e eu nao domino muito bem esse aspecto (por equanto) :/

Os pointers nao sao nada de meter medo :)

Tens que comecar a usa-los mais cedo ou mais tarde -- eu diria que quanto mais cedo melhor ja que eles fazem parte integrante da linguagem.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

eu diria que quanto mais cedo melhor ja que eles fazem parte integrante da linguagem.

Quanto mais cedo, mais facilmente desmistificas o assunto e te apercebes que não são nada do que muita gente diz...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
waza

ahh, e o file, como passo um file para uma funçao?

algo deste genero?

funcao(fp);

char *funcao(char *file);

por exemplo num fwrite, com um apontador sería algo assim?!

em que aluno é um typedef para a struct

fwrite(*ptr, sizeof(aluno),1,fp); <- intenção de escrever toda a estrutura

Editado por waza

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Supondo, por exemplo, que a função rewind() foi escrita em C, como achas que ela é definida?

... rewind(...) {
   ...
}

De certeza que não era void rewind(void); :)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.