Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Programação C - Problema
21-11-2016, 13:55
Mensagem: #1
Programação C - Problema
Boa tarde,

Tenho um pequeno projeto para fazer em C, mas estou a ter alguns problemas a entender o porquê de me estar a dar tantos erros e de não compilar, e infelizmente não sou muito experiente em C..Neutral

O objetivo deste programa é inserir/consultar componentes, consultar o estado e estatisticas gerais.
Embora o meu problema neste momento é conseguir meter a função "inserirComponentes" e entender como é que tenho de fazer futuramente sem dar erros desnecessários.

Não sei se é relevante, mas estou a usar o Codeblocks como compilador.
Em anexo envio o ficheiro com o código que tenho todo. - "C.txt"

Agradeço desde já toda a ajuda que puderem fornecer.Smile


Ficheiro(s) anexado(s)
.txt  C.txt (Tamanho: 12,66 KB / Downloads: 6)
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
22-11-2016, 01:54
Mensagem: #2
RE: Programação C - Problema
Dava jeito colocares o código num site tipo Ideone.com. Facilita muito a leitura e compreensão do código.

Sent from my GT-I9505 using Tapatalk
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
22-11-2016, 11:58
Mensagem: #3
RE: Programação C - Problema
(22-11-2016 01:54)PsySc0rpi0n Escreveu:  Dava jeito colocares o código num site tipo Ideone.com. Facilita muito a leitura e compreensão do código.

Sent from my GT-I9505 using Tapatalk

PsySc0rpi0n desde já obrigado pela resposta.
Não sabia como dispor o código no forum e não tinha conhecimento que havia compiladores online.
Espero que assim seja mais fácil a leitura e compreensão.

http://ideone.com/fork/sUhV8T

Cumps.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
22-11-2016, 13:26 (Esta mensagem foi modificada pela última vez a: 22-11-2016 13:29 por PsySc0rpi0n.)
Mensagem: #4
RE: Programação C - Problema
(22-11-2016 11:58)Gonkf7 Escreveu:  
(22-11-2016 01:54)PsySc0rpi0n Escreveu:  Dava jeito colocares o código num site tipo Ideone.com. Facilita muito a leitura e compreensão do código.

Sent from my GT-I9505 using Tapatalk

PsySc0rpi0n desde já obrigado pela resposta.
Não sabia como dispor o código no forum e não tinha conhecimento que havia compiladores online.
Espero que assim seja mais fácil a leitura e compreensão.

http://ideone.com/fork/sUhV8T

Cumps.

Como podes imaginar não é fácil depurar um código desses assim de cabeça. Mas posso apontar/questioner alguns pontos, pelo menos:

A tua função char lerTipoC(void) funciona bem????
É que estás a declarar uma variável (tipoC) como char mas depois estás a compará-la com uma string!!!

Depois de tentar compilar esse código no ideone.com, só posso dizer uma coisa! Resolve o máximo de erros possível porque assim nem vale a pena continuar a olhar! Pelo menos os erros... Os warnings logo se vê! A linha 203 é um caso... Porque raio usas um asterisco antes do nome da variável??? Isso devia ser mais algo do género *(numeroComponentes + i) ou numeroComponentes[i]...
E olha bem também para a linha 189.

novo = realloc(componentes,(*numeroComponentes+1)*sizeof(tComponente));

De certeza que é isto que queres fazer?
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
22-11-2016, 15:03
Mensagem: #5
RE: Programação C - Problema
(22-11-2016 13:26)PsySc0rpi0n Escreveu:  
(22-11-2016 11:58)Gonkf7 Escreveu:  
(22-11-2016 01:54)PsySc0rpi0n Escreveu:  Dava jeito colocares o código num site tipo Ideone.com. Facilita muito a leitura e compreensão do código.

Sent from my GT-I9505 using Tapatalk

PsySc0rpi0n desde já obrigado pela resposta.
Não sabia como dispor o código no forum e não tinha conhecimento que havia compiladores online.
Espero que assim seja mais fácil a leitura e compreensão.

http://ideone.com/fork/sUhV8T

Cumps.

Como podes imaginar não é fácil depurar um código desses assim de cabeça. Mas posso apontar/questioner alguns pontos, pelo menos:

A tua função char lerTipoC(void) funciona bem????
É que estás a declarar uma variável (tipoC) como char mas depois estás a compará-la com uma string!!!

Depois de tentar compilar esse código no ideone.com, só posso dizer uma coisa! Resolve o máximo de erros possível porque assim nem vale a pena continuar a olhar! Pelo menos os erros... Os warnings logo se vê! A linha 203 é um caso... Porque raio usas um asterisco antes do nome da variável??? Isso devia ser mais algo do género *(numeroComponentes + i) ou numeroComponentes[i]...
E olha bem também para a linha 189.

novo = realloc(componentes,(*numeroComponentes+1)*sizeof(tComponente));

De certeza que é isto que queres fazer?

Realmente estava a declarar uma char e comparar com uma string, erro meu - obrigado.
Relativamente aos outros pontos ao qual referiste, tive a ver alguns exemplos que me deram para criar e guardar informação e foi assim que me disseram para fazer.

Existe outra maneira para eu puder recolher os dados que pretendo e guarda los para depois conseguir consultar e entre outras funções possíveis. 
Quando falo em guardar não me estou a referir em ficheiros.
O objectivo deste programa seria criar uma ficha para o utilizador preencher com os requisitos de entrada e saída de material informático e depois alterar o estado.

Agradeço a compreensão que tens tido PsySc0rpi0n.

Cumps.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
22-11-2016, 16:10
Mensagem: #6
RE: Programação C - Problema
A tua pergunta que tu fazes de como recolher dados é muito vaga. Pode-la fazer de várias maneiras. Eu não vejo problema nenhum em criar uma estrutura como tu fizeste e usá-la.
Tens é que fazer corresponder os tipos de dados que as funções devolve com a declaração da função, ou seja, se dizes que uma função vai devolver um ponteiro para um inteiro, não podes devolver um inteiro. Ou melhor, poder até podes, o resultado é que provavelmente não sera o que tu queres!

Eu também não sou nenhum expert em C, e para saber o pouco que sei, e para desenvolver um programa como estes, tens que saber bem o que são ponteiros e como trabalhar com eles e também saber como se trabalha com ponteiros para estruturas.

Na minha opinião, um programa destes trabalha sempre da seguinte maneira:
Função que mostra os menus e recebe uma opção para, através de um Switch Case, chamar a função correspondente à opção seleccionada.
Função que pede dados ao user para adicionar à base de dados
Função que pede dados ao user para remover da base de dados
Função que procura dados na base de dados e o apresenta na consola
Função que lê a base de dados para a memória
Função que grava a base de dados em disco.

Assim por alto seria isto, mas teria que ser feito com base em listas ligadas pois é relativamente mais fácil gerir uma base de dados dinâmica que uma base de dados que são no fundo uma array de estruturas!

Quanto ao teu código em concreto, procura eliminar erros do género:
-assignment from incompatible pointer type

-expected 'tComponente * {aka struct <anonymous> *}' but argument is of type 'tComponente ** {aka struct <anonymous> **}'

-request for member 'codigo' in something not a structure or union

-request for member 'marca' in something not a structure or union

-too few arguments to function 'lerString'

-request for member 'tipo' in something not a structure or union

-return from incompatible pointer type

Estes são erros que quer queiras quer não, tens que os corrigir ou o teu programa nunca vai funcionar nem bem nem mal!
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
22-11-2016, 16:59
Mensagem: #7
RE: Programação C - Problema
(22-11-2016 16:10)PsySc0rpi0n Escreveu:  A tua pergunta que tu fazes de como recolher dados é muito vaga. Pode-la fazer de várias maneiras. Eu não vejo problema nenhum em criar uma estrutura como tu fizeste e usá-la.
Tens é que fazer corresponder os tipos de dados que as funções devolve com a declaração da função, ou seja, se dizes que uma função vai devolver um ponteiro para um inteiro, não podes devolver um inteiro. Ou melhor, poder até podes, o resultado é que provavelmente não sera o que tu queres!

Eu também não sou nenhum expert em C, e para saber o pouco que sei, e para desenvolver um programa como estes, tens que saber bem o que são ponteiros e como trabalhar com eles e também saber como se trabalha com ponteiros para estruturas.

Na minha opinião, um programa destes trabalha sempre da seguinte maneira:
Função que mostra os menus e recebe uma opção para, através de um Switch Case, chamar a função correspondente à opção seleccionada.
Função que pede dados ao user para adicionar à base de dados
Função que pede dados ao user para remover da base de dados
Função que procura dados na base de dados e o apresenta na consola
Função que lê a base de dados para a memória
Função que grava a base de dados em disco.

Assim por alto seria isto, mas teria que ser feito com base em listas ligadas pois é relativamente mais fácil gerir uma base de dados dinâmica que uma base de dados que são no fundo uma array de estruturas!

Quanto ao teu código em concreto, procura eliminar erros do género:
-assignment from incompatible pointer type

-expected 'tComponente * {aka struct <anonymous> *}' but argument is of type 'tComponente ** {aka struct <anonymous> **}'

-request for member 'codigo' in something not a structure or union

-request for member 'marca' in something not a structure or union

-too few arguments to function 'lerString'

-request for member 'tipo' in something not a structure or union

-return from incompatible pointer type

Estes são erros que quer queiras quer não, tens que os corrigir ou o teu programa nunca vai funcionar nem bem nem mal!

Ok, vou tentar resolver estes erros.

Obrigado pelos esclarecimentos.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
22-11-2016, 18:37
Mensagem: #8
RE: Programação C - Problema
Esses erros são quase todos fáceis de resolver. Qualquer coisa diz, que eu tento ajudar.

Sent from my GT-I9505 using Tapatalk
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 1 Visitante(s)