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

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
 
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:
 
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:
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);
}
}
}
 
Koncaman disse:
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.

mas sao strings! nomeQuadro e uma string.... pq nao funciona?
 
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
 
HiGhVoIcE disse:
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

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?
 
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!
 
S|N disse:
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?

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:
Gostava de agradecer a todos. O meu programa compila ate agora, sem erros.
Agora posso continuar
Muito obrigado.
 
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
 
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]);
}
}
 
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'...
 
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?
 
Tudo bem, ja enviei o trabalho. Tem muita fita-cola mas da pra mostrar q perdemos algum tempo com aquilo
Obrigado pelas ajudas pessoal
 
Back
Topo