Jump to content
waza

Opiniao para melhoramento !

Recommended Posts

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);
}

Edited by waza

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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) :/

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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

Edited by waza

Share this post


Link to post
Share on other 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!

Share this post


Link to post
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

×
×
  • 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.