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

c - compilação - erros que não compreendo :(

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

  1. S|N

    S|N Power Member

    #define dimensaoC 60
    #define dimensaoQ 100
    char nomeQuadro[dimensaoQ]; (string global)

    ===================== num ciclo =============================
    int indice;
    fgets(nomeQuadro[indice],dimensaoC,fich); (aqui está o erro)
    ===================== fim ciclo ==============================
    erro (gcc a funcionar bem):
    Trabalho1BETA.c:27: warning: passing arg 1 of `fgets' makes pointer from integer without a cast

    Ajudem please
     
  2. HiGhVoIcE

    HiGhVoIcE Power Member

    tas a cometer aí um belo erro...tas a querer meter como parametro do fgets apenas uma letra? é isso que estas a fazer... nomeQuadro[indice] devolve-te a posiçao indice do vector nomeQuadro...

    EDIT: atenção aos apontadores :cool:
     
  3. S|N

    S|N Power Member

    Tens razão! Hmmm o que ponho então?
     
  4. Koncaman

    Koncaman Utilizador Saloio

    põe uma string! aka vector de caracteres.
    no caso deverá ser simplesmente nomeQuadro
    neste caso, deverás declarar nomeQuadro como vector de cracteres
    char nomeQuadro[dimensão] , presupondo que não usas memoria dinâmica
    quando usas nomeQuadro[indice] referes-te apenas a uma casa do vector, que será a casa com o nº que esta em 'indice' .

    se queres apenas uma letra, tens funções mais adequadas.
     
    Última edição: 9 de Abril de 2005
  5. S|N

    S|N Power Member

    Obrigado pela tua resposta, vou tentar o que disseste :D
     
  6. S|N

    S|N Power Member

    Como chamo funções do tipo void funcao(void)?

    No programa....
     
  7. S|N

    S|N Power Member

    o que está mal nisto?


    void carregar_struct(void)
    {
    FILE *fich;
    fich=fopen("galeria.txt","r");
    int indice;
    while(!feof(fich))
    {
    for (indice=0;(indice<dimensaoQ);indice++)
    {
    fgets(nomeQuadro,dimensaoC+1,fich);
    strlen(nomeQuadro)-1='\0';
    fgets(nomePintor,dimensaoC+1,fich);
    strlen(nomePintor)-1='\0';
    fscanf(fich,"%d",&transacao);
    fscanf(fich,"%d",&mercado);
    }
    }
    }
     
  8. S|N

    S|N Power Member

    mas sao strings! nomeQuadro e uma string.... pq nao funciona?
     
  9. HiGhVoIcE

    HiGhVoIcE Power Member

    strlen(nomeQuadro)-1='\0'

    isto esta mal... strlen() devolve-te um int. e tu tas a efectuar uma operação de subtracção a partir do nada, ou seja, invalido...

    strlen(nomeQuadro) - da-te o tamanho da string (incluindo o \0)
    nomeQuadro(strlen(nomeQuadro-1)) - da-te a string sem o \0
     
  10. S|N

    S|N Power Member

    Meu tás mesmo a seguir a ideia! Mas o fgets tem um prob, lê o \n antes do \0 e como quero ler o \0 primeiro tou a dizer a ele para "esmagar" o \n e por lá um \0 :D podes dizer-me outra forma de o fazer por favor?
     
  11. S|N

    S|N Power Member

    Aquilo da subtração a partir do nada não percebi bem. O que quero é afectar aquela casa do vector.... mas espera. deve ser a outra dimensao do vector!

    o vector é: char nomeQuadros[dimensaoQ][dimensaoC]

    as palavras estao "deitadas" na dimensaoC (hehehe eu ria-me se viste isto à 3 dias atrás) e deve haver uma forma de afectar o ultimo char do vector... :D
    Help me please!
     
  12. Koncaman

    Koncaman Utilizador Saloio

    strlen(nomeQuadro)-2='\n'

    e não te esqueças que se declaras
    char vector[10];

    tens caracteres disponiveis da posição 0, à posição 9

    vector[0], vector[1], (...) , vector[9]
    vector[10] não é suposto usar. por vezes ate pode ser que trabalhe. mas está errado.
     
    Última edição: 10 de Abril de 2005
  13. S|N

    S|N Power Member

    Gostava de agradecer a todos. O meu programa compila ate agora, sem erros.
    Agora posso continuar
    Muito obrigado.
     
  14. S|N

    S|N Power Member

    Mais uma coisinha: tava a testar o programa e ele nao se porta como gostaria. O ficheiro tem no maximo 100 nomes mas ele nao deveria imprimir todos a zero do ficheiro acabar. Devia ficar pelo ultimo quadro.
    Por isso a condição while.

    void carregar_struct(void)
    {
    FILE *fich;
    fich=fopen("galeria.txt","r");
    int indice;
    while(!feof(fich))
    {
    for (indice=0;(indice<dimensaoQ);indice++)
    {
    fgets(nomeQuadro[indice],dimensaoC+1,fich);
    nomeQuadro[indice][strlen(nomeQuadro[indice])-1]='\0';
    fgets(nomePintor[indice],dimensaoC+1,fich);
    nomePintor[indice][strlen(nomePintor[indice])-1]='\0';
    fscanf(fich,"%d",&transacao[indice]);
    fscanf(fich,"%d",&mercado[indice]);
    fscanf(fich,"%d",&falecido[indice]);
    }
    }
    fclose(fich);
    }

    O que acontece é isto:

    Guernica Pablo Picasso 186350 198000
    Chiffres et Constellations 0 0
    Joan Mir≤ 35500 40000 1
    La Siesta Vincent Van Gogh 55000 63500
    Apples and Oranges 0 0
    Paul CΘzanne 65800 78000 1
    Dance at Le Moulin de la Galette, Montmartre Auguste Renoir 36000 38000
    Olympia 0 0
    Edouard Manet -92000 92000 1
    The Birth of Venus Alexandre Cabanel 55000 78000
    L'Ultima Cena 0 0
    Leonardo da Vinci 126000 138000 1
    Death of a Butterfly Federico Correa 25000 28000
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
     
  15. S|N

    S|N Power Member

    O erro é provávelmete no procedimento display. Como faço esta listing so enquanto os vectores da minha matriz tiverem conteudo? ele tá a imprimir o resto a zero naturalmente mas eu nao quero :S Ajudem plz tenho 2ªas horas pra entregar isto!

    void listar_quadros(void)
    {
    int indice;
    for(indice=0;indice<dimensaoQ; indice++)
    {
    printf("%s ",nomeQuadro[indice]);
    printf("%s ",nomePintor[indice]);
    printf("%d ",transacao[indice]);
    printf("%d\n",mercado[indice]);
    }
    }
     
  16. HiGhVoIcE

    HiGhVoIcE Power Member

    podes fazer algo, mas é mt custoso! podes meter ai uma confição if que te verifica se tens '0' numa dada celula da matriz...isto implica que inicies a matriz com a primeira coluna a '0'...
     
  17. S|N

    S|N Power Member

    foi exactamente isso que fiz:

    void listar_quadros(void)
    {
    int indice;
    for(indice=0;(indice<dimensaoQ); indice++)
    {
    if (nomeQuadro[indice][0]!='\0') printf("%s\n",nomeQuadro[indice]);
    if (nomeQuadro[indice][0]!='\0') printf("%s\n",nomePintor[indice]);
    if (transacao[indice]!=0) printf("%d\n",transacao[indice]);
    if (mercado[indice]!=0) printf("%d\n",mercado[indice]);
    if (falecido[indice]!=
    }
    }

    Mas agora tenho outro problema: falecido é indicado por 1---sim e 0---ainda nao
    como sei se está vazio?
     
  18. HiGhVoIcE

    HiGhVoIcE Power Member

    n percebi a pergunta
     
  19. S|N

    S|N Power Member

    Tudo bem, ja enviei o trabalho. Tem muita fita-cola mas da pra mostrar q perdemos algum tempo com aquilo
    Obrigado pelas ajudas pessoal
     

Partilhar esta Página