• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

dario1133

funções

2 mensagens neste tópico

gostava que me dissesem se à algo de errado na seguinte função:

void clientes_regulares (estacionamentos v[n], int size)
{

clientes w[100];
FILE*fpc;
int n_clientes;
int i =0,j,cont=0;

if ((fpc=fopen ("clientes.txt", "r"))==NULL)
	return (0);
else
{ 
	while (!feof (fpc))
	{
		fscanf (fpc, "%s;\n", &w[i].matricula);
		i=i+1;
	}
	fclose (fpc);
	n_clientes = i;
}

for (i=0; i<size; i++)
	for (j=0; j<n_clientes; j++)
	if	(!strcmp (v[i].matricula,w[j].matricula))
		cont++;
return(1);

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

gostava que me dissesem se à algo de errado na seguinte função:

Vê os meus comentários ( /* pmg ... */ ) no meio do código

void clientes_regulares (estacionamentos v[n], int size)
{

clientes w[100];
FILE*fpc;
int n_clientes;
int i =0,j,cont=0;

if ((fpc=fopen ("clientes.txt", "r"))==NULL)
	return (0);
	/* pmg
	** Esta função devolve void.
	** o 0 é errado (e se o compilador o aceitar irrelevante)
	*/
else
{ 
	while (!feof (fpc))
	{
		fscanf (fpc, "%s;\n", &w[i].matricula);
		i=i+1;
	}
	/* pmg
	** Este ciclo pode nunca acabar.
	** Se o fscanf falhar (por exemplo com inexistência de ";" no input)
	** a função feof() devolve false eternamente e
	** o ficheiro "não avança".
	**
	** Além disso, embora não nos tenhas dado a definição
	** do tipo `clientes`, não tens garantia que o espaço
	** existente em `matricula` seja suficiente para
	** o que está no input, o que pode causar um
	** "buffer overflow".
	*/
	fclose (fpc);
	n_clientes = i;
}

for (i=0; i<size; i++)
	for (j=0; j<n_clientes; j++)
	if	(!strcmp (v[i].matricula,w[j].matricula))
	/* pmg
	** ? ? ? ? ?
	** Qual é o tipo de clientes.matricula?
	** Qual é o tipo de estacionamentos.matricula?
	** Como estás a usá-los no strcmp, suponho que
	** sejam char[] ou char*
	**
	** Quer um quer outro, não têm problema no strcmp,
	** mas dão erro no fscanf anterior.
	** Se o fscanf anterior funciona, então é o strcmp
	** que tem erro.
	*/
		cont++;
return(1);
/* pmg
** a função está definida como devolvendo void
*/

}

Happy Coding :P

0

Partilhar esta mensagem


Link 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