Ajuda fazer função em C

jffluis

Power Member
Boas pessoal tou a tentar fazer uma função em C só que só obtenho erros e nem consigo compilar. Ainda sou um leigo nisto e ainda estou a dar os primeiros passos, se me podessem ajudar agradecia. Não queria que me fizessem a "papinha toda", mas sim que me dessem umas luzes para ir ganhando alguma autonomia.
O trecho de código que quero fazer uma função é este:

Código:
[COLOR=#BB2CA2][FONT=Menlo]
[/FONT][/COLOR][FONT=Menlo]if(numeroParticipantes == MAX_PARTICIPANTES)[/FONT][FONT=Menlo]                            {[/FONT]
[FONT=Menlo]printf("Ja tem %d participantes inseridos!\n", MAX_PARTICIPANTES);[/FONT]
[FONT=Menlo]                            }[/FONT]
[FONT=Menlo]                            else[/FONT]
[FONT=Menlo]                            {[/FONT]
[FONT=Menlo]                                do[/FONT]
[FONT=Menlo]                                {[/FONT]
[FONT=Menlo]                                    printf("\nInsira o numero do %d participante: ",numeroParticipantes+1);[/FONT]
[FONT=Menlo]                                    fflush(stdin);[/FONT]
[FONT=Menlo]                                    scanf("%d", &participantes[numeroParticipantes].numero);[/FONT]
[FONT=Menlo]                                    repetido=0;[/FONT]
[FONT=Menlo]                                    for (i=0; i<numeroParticipantes; i++)[/FONT]
[FONT=Menlo]                                    {[/FONT]
[FONT=Menlo]                                        if(participantes[i].numero==participantes[numeroParticipantes].numero)[/FONT]
[FONT=Menlo]                                            repetido=1;[/FONT]
[FONT=Menlo]                                    }[/FONT]
[FONT=Menlo]                                    if (repetido==1)[/FONT]
[FONT=Menlo]                                        printf("\nEsse numero ja existe!");[/FONT]
[FONT=Menlo]                                }[/FONT]
[FONT=Menlo]                                while (repetido==1);[/FONT]

[FONT=Menlo]                                printf("\nInsira o nome do Participante: ");[/FONT]
[FONT=Menlo]                                scanf("%s", participantes[numeroParticipantes].nome);[/FONT]
[FONT=Menlo]                               printf("\nInsira a idade do Participante: ");[/FONT]
[FONT=Menlo]                                fflush(stdin);[/FONT]
[FONT=Menlo]                                participantes[numeroParticipantes].idade = lerInteiro(MIN_IDADE,MAX_IDADE);[/FONT]

[FONT=Menlo]                                numeroParticipantes++;[/FONT]
[FONT=Menlo]                            }[/FONT]
 
Pois só com esse trecho de código e sem saber o problema não sei ajudar. Mas pelo que percebi queres preencher um vector de participantes de alguma coisa. Deduzo que isso esteja dentro de um ciclo onde "numeroParticipantes" tenha sido inicializado e vai sendo incrementado.

Tu inicialmente pedes ao user para inserir o numero do participante e colocas logo na estrutura e só depois vais confirmar se ele já existia, se calhar devias confirmar se já existe primeiro antes de lá colocares, senão estás sempre a substituir o valor, mas de qualquer das formas isso não daria erro de compilação, é só uma questão de eficiência. E por fim pedes o resto dos campos da estrutura. Depois não sei o que "lerInteiro" faz, mas um simples scanf deveria bastar, mas não sei qual é o âmbito do problema. Explica melhor e lá se conseguirá ajudar.
 
Pois só com esse trecho de código e sem saber o problema não sei ajudar. Mas pelo que percebi queres preencher um vector de participantes de alguma coisa. Deduzo que isso esteja dentro de um ciclo onde "numeroParticipantes" tenha sido inicializado e vai sendo incrementado.

Tu inicialmente pedes ao user para inserir o numero do participante e colocas logo na estrutura e só depois vais confirmar se ele já existia, se calhar devias confirmar se já existe primeiro antes de lá colocares, senão estás sempre a substituir o valor, mas de qualquer das formas isso não daria erro de compilação, é só uma questão de eficiência. E por fim pedes o resto dos campos da estrutura. Depois não sei o que "lerInteiro" faz, mas um simples scanf deveria bastar, mas não sei qual é o âmbito do problema. Explica melhor e lá se conseguirá ajudar.
Obrigado desde já pela tua ajuda, a função lerInteiro foi uma função cirada na aula para ler nº inteiros

Posso meter aqui o código da função:


Código:
[FONT=Menlo]int[/FONT][FONT=Menlo] lerInteiro([/FONT][FONT=Menlo]int[/FONT][FONT=Menlo] min,[/FONT][FONT=Menlo]int[/FONT][FONT=Menlo] max)[/FONT][FONT=Menlo]{[/FONT]
[FONT=Menlo]    int num;[/FONT]
[FONT=Menlo]    do[/FONT]
[FONT=Menlo]    {[/FONT]

[COLOR=#D12F1B][FONT=Menlo]        printf("\n\nInsira um valor inteiro (%d a %d):",min,max);[/FONT][/COLOR]
[FONT=Menlo]        fflush(stdin);[/FONT]
[FONT=Menlo]        scanf("%d", &num);[/FONT]
[FONT=Menlo]        if (num<min || num>max)[/FONT]
[FONT=Menlo]        {[/FONT]
[COLOR=#D12F1B][FONT=Menlo]            printf("\nNumero invalido!");[/FONT][/COLOR]
[FONT=Menlo]        }[/FONT]

[FONT=Menlo]    }[/FONT]
[FONT=Menlo]    while (num<min || num>max);[/FONT]

[FONT=Menlo]    return num;[/FONT]
[FONT=Menlo]}
[/FONT]

Está-me a dar este erro no Xcode: "Subscripted value is not an array, pointer, or vector"

Já agora ponho aqui a função que quero fazer e me está a dar erro:

Código:
[FONT=Menlo]int[/FONT][FONT=Menlo] inserirParticipantes()[/FONT][FONT=Menlo]{[/FONT]
[FONT=Menlo]    int numeroParticipantes, repetido, participantes, i;[/FONT]
[FONT=Menlo]    if (numeroParticipantes==MAX_PARTICIPANTES){[/FONT]
[FONT=Menlo]        [/FONT]
[COLOR=#D12F1B][FONT=Menlo]        printf("Ja tem %d participantes inseridos!\n", MAX_PARTICIPANTES);[/FONT][/COLOR]
[FONT=Menlo]    }[/FONT]
[FONT=Menlo]    [/FONT]
[FONT=Menlo]    else{[/FONT]
[FONT=Menlo]        do {[/FONT]
[FONT=Menlo]            [/FONT]
[COLOR=#D12F1B][FONT=Menlo]            printf("\nInsira o numero do %d participante: ",numeroParticipantes+1);[/FONT][/COLOR]
[FONT=Menlo]            fflush(stdin);[/FONT]
[FONT=Menlo]            scanf("%d", &participantes[numeroParticipantes].numero);[/FONT]
[FONT=Menlo]            repetido=0;[/FONT]
[FONT=Menlo]            for (i=0; i<numeroParticipantes; i++)[/FONT]
[FONT=Menlo]            {[/FONT]
[FONT=Menlo]                if(participantes[i].numero==participantes[numeroParticipantes].numero)[/FONT]
[FONT=Menlo]                    repetido=1;[/FONT]
[FONT=Menlo]            }[/FONT]
[FONT=Menlo]            if (repetido==1)[/FONT]
[COLOR=#D12F1B][FONT=Menlo]                printf("\nEsse numero ja existe!");[/FONT][/COLOR]
[FONT=Menlo]            [/FONT]
[FONT=Menlo]            [/FONT]
[FONT=Menlo]        } while (repetido==1);[/FONT]
[FONT=Menlo]    }[/FONT]
[FONT=Menlo]}[/FONT]
 
Última edição:
Erros que pode ver no segundo codigo:

Inicializa primeiro todas as variveis!
Aqui estas a comparar lixo a um valor: if (numeroParticipantes==MAX_PARTICIPANTES)

participantes -> Está declaro como variavel inteira e não como vector de inteiros

participantes[numeroParticipantes].numero???????????????
Não percebi o que pretendes fazer aqui mas isto não é possivel se participantes for um array.

 
Back
Topo