Erro rápido

Isto é ilegal sintacticamente (como é indicado pelo compilador):
remover(num_aluno, *nalunos, numero[])
Ou passas numero ou então numero[<indice>].
Precisas mesmo de usar o remover recursivamente.
Eu expliquei numa outra thread que é mais fácil copiar os elementos (num array), que estão a seguir ao elemento a remover, para a sua posição anterior. Assim removes implicitamente o elemento pretendido.
Se for o ultimo então basta decrementar a variavel que contem a informação do numero de alunos.

Irá ser algo parecido com isto:
Código:
for(	int i = indice_do_elemento_a_remover + 1; 
	i < numero_alunos; 
	i++) {
	strcpy(nome[i - 1], nome[i]);
}
 
Karmack disse:
Isto é ilegal sintacticamente (como é indicado pelo compilador):
remover(num_aluno, *nalunos, numero[])
Ou passas numero ou então numero[<indice>].
Precisas mesmo de usar o remover recursivamente.
Eu expliquei numa outra thread que é mais fácil copiar os elementos (num array), que estão a seguir ao elemento a remover, para a sua posição anterior. Assim removes implicitamente o elemento pretendido.
Se for o ultimo então basta decrementar a variavel que contem a informação do numero de alunos.

Irá ser algo parecido com isto:
Código:
for(	int i = indice_do_elemento_a_remover + 1; 
	i < numero_alunos; 
	i++) {
	strcpy(nome[i - 1], nome[i]);
}

Exacto. Eu fiz isso. Mas em três funções. Ficou assim:

http://www.rafb.net/paste/results/4YX9sU72.html
 
É isso mesmo. O compilador não deu erros na função
void op_remover_aluno(void)?

Quando tiveres tempo aprende estruturas de dados como listas ligadas, queues, stacks, etc... dá muito jeito.
http://www.nist.gov/dads/
 
Última edição:
É uma função perfeitamente válida, uma função que não retorna nada nem recebe nada.

Mas tenta aplicar sempre o comentário -Wall ao compilar o programa (caso uses o gcc, claro)
 
Moralez disse:
É uma função perfeitamente válida, uma função que não retorna nada nem recebe nada.

Mas tenta aplicar sempre o comentário -Wall ao compilar o programa (caso uses o gcc, claro)

O que me intriga é esta linha:
if (remover(num_aluno, *nalunos, numero[])==1)
 
Karmack disse:
O que me intriga é esta linha:
if (remover(num_aluno, *nalunos, numero[])==1)

Essa linha existe pois a funcao remover pode ser inválida (caso o utilizador indique um n de aluno que n existe na lista...) Nesse caso devolveria 0 e a respectiva menssagem de erro. Acho que o erro tem a ver com os parametros da funcao op_remover_aluno. reparem que está void. Bem, eu tentei fazer o seguinte: void op_remover_aluno(int *nalunos, int numero[])
Agora deveria dar, mas o gcc diz q ha um erro de sintaxe antes do ] :wow:
Sempre pensei que vectores unidimensionais eram declarados em funcoes assim: tipo vector[]. Help please! :005:
 
Não podes escrever numeros[] num programa em C. É sintacticamente inválido.
Quando tens numa função um argumento declarado desta forma:
int numeros[]
quer dizer que estás a passar é um ponteiro. É quase o mesmo que:
int* numero
mas com a 1º forma é mais fácil para o programador saber que deve passar é um array e não apenas um unico elemento.
Ao chamares remover tens é de passar o numero em vez de numero[].

Aqui fica uns exemplo para ficares mais esclarecido:

int *ponteiro;
int vector[10];

ponteiro = vector;

*(ponteiro + 9) = 10; // E igual a vector[9] = 10
ponteiro[9] = 10; // E igual a *(vector + 9) = 10

printf("%d\n", (long) (ponteiro + 5); // Imprime o valor do endereço da 6º posicao de memoria do vector

printf("%d\n", (long) (vector + 5); // Imprime o valor do endereço da 6º posicao de memoria do vector
 
Queria usar isto:

shift_esquerda_alunos(int posicao, int nalunos, int numero[], char name[][MAX_ALUNOS]); linha 77

dentro disto:

int remover(int num_aluno, int *nalunos, int numero[])


O gcc dá este erro:

Exercício12.c: In function `remover':
Exercício12.c:77: error: parse error before "int"


Help please :sad:
 
Back
Topo