1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Erro rápido

Discussão em 'Programação' iniciada por S|N, 22 de Abril de 2005. (Respostas: 10; Visualizações: 679)

  1. S|N

    S|N Power Member

  2. Karmack

    Karmack Power Member

    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]);
    }
    
     
  3. S|N

    S|N Power Member

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

    http://www.rafb.net/paste/results/4YX9sU72.html
     
  4. Karmack

    Karmack Power Member

    É 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: 23 de Abril de 2005
  5. Morais

    Morais Power Member

    É 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)
     
  6. Karmack

    Karmack Power Member

    O que me intriga é esta linha:
    if (remover(num_aluno, *nalunos, numero[])==1)
     
  7. S|N

    S|N Power Member

    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:
     
  8. Karmack

    Karmack Power Member

    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
     
  9. S|N

    S|N Power Member

    Obrigado Karmack.
    Vou estudar o que escreveste e de certeza q me vai ajudar :)
     
  10. S|N

    S|N Power Member

    De uma forma geral quando é que entro com parametros do tipo numero[] ou numero somente?
     
  11. S|N

    S|N Power Member

    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:
     

Partilhar esta Página