Ajuda em linguagem C

rekateka

Membro
Boas pessoal ! Estou a ter programação pela primeira vez e estou com uma dúvida sobre fazer um menu e clicar numa opção que lá estiver e através dessa opção abrir outro sub-menu e escrever lá os dados para gravar. Eu tenho este código que fiz até agora apesar de ainda ter de ser melhorado.. Neste caso o programa é de carros e tenho de registar e consultar as peças ou modelos que lá vou metendo.
Acho que estou a começar mal com as variáveis apesar de o compilador não dar erro, mas penso que isto devia ser feito em struct mas ainda sou muito "verdinho" nisto.

Código:
{
int cilindrada=0;
int potencia=0;
float preco=0.0f;
char designacao;
char tipo;
char modelo;
char peca;
char acessorio;
char marca;
int opcao;
int menu[8];
char str_array[]="menu";
 
 
printf("1 - Registar Pecas/Acessorios\n");
printf("2 - Consulta de Pecas/Acessorios\n");
printf("3 - Registo de carros\n");
printf("4 - Consulta de carros registados\n");
printf("5 - Associar Pecas/Acessorios a carros\n");
printf("6 - Consulta de Pecas/Acessorios (por carro)\n");
printf("7 - Consulta de carro (por peca)\n");
printf("8 - Sair\n");
 
printf("Qual a opcao que deseja efectuar?\n");
 
getchar(); // dummy
opcao = getchar();
 
scanf("d%\n",&opcao);
 
 
switch(opcao)
{
case '1': printf("Registar Pecas/Acessorios");
case '2': printf("Consulta de Pecas/Acessorios");
case '3': printf("Registo de carros");
case '4': printf("Consulta de carros registados");
case '5': printf("Associar Peças/Acessórios a carros");
case '6': printf("Consulta de Pecas/Acessorios (por carro)");
case '7': printf("Consulta de carro (por peca)");
case '8': break;
 
}
}
Quando corro o programa aparecem apenas as opcoes do printf e quando escolho alguma pondo lá o número da opção ele não entra nessa opção não sei o que fazer :(. Mas ainda falta muito código...
se alguém me puder dar umas luzes, agradecia :) obrigado !
 
Última edição pelo moderador:
getchar(); // dummy
opcao = getchar();

scanf("d%\n",&opcao);

o problema deve ser aqui
tens dois getchars e um scanf para que? com isso tens que carregar em dois caracteres que não vao servir para nada (os dois getchar) e depois ainda tens que escrever um número e carregar no enter.
deves ter-te confundido nessa parte. em vez disso basta-te isto:
opcao = getchar();
 
sim tens razão, já corriji isso e já me passa para o switch que antes não passava. Agora falta-me é código para por, uma das minhas dúvidas é escolher a opção 1 por exemplo e quando ponho la "1" enter, aparecer-me essa opção já com os campos para preencher as coisas neste caso por exemplo seria:

tipo de peça:
designação:
preço:
marca:

tenho de incluir isto nos cases com printf's ? ele agora se clicar numa opção qualquer simplesmente me põe lá os cases todos..
 
Código:
case '1': printf("Registar Pecas/Acessorios");
case '2': printf("Consulta de Pecas/Acessorios");
case '3': printf("Registo de carros");
case '4': printf("Consulta de carros registados");
case '5': printf("Associar Peças/Acessórios a carros");
case '6': printf("Consulta de Pecas/Acessorios (por carro)");
case '7': printf("Consulta de carro (por peca)");
case '8': break;

tens aqui mais erros. se opcao é um inteiro nao podes comparar com texto, e faltam os breaks no fim de cada case. vendo o teu case '8' acho que não percebeste bem o uso daquilo. o correcto é:

Código:
case 1: 
   printf("Registar Pecas/Acessorios");
   break;
case 2: 
   printf("Consulta de Pecas/Acessorios");
   break;
case 3: 
   printf("Registo de carros");
   break;
case 4: 
   printf("Consulta de carros registados");
   break;
case 5: 
   printf("Associar Peças/Acessórios a carros");
   break;
case 6: 
   printf("Consulta de Pecas/Acessorios (por carro)");
   break;
case 7: 
   printf("Consulta de carro (por peca)");
   break;
 
hmm então declaro a opcão como um char correcto ? Pois os erros é normal, isto faz-me um bocado de confusão ainda.. é tudo muito novo :( terei que por os campos restantes nesses cases para quando escolher a opção que quero poder aceder e preencher ? neste caso com scanf's também ?

Faz-me confusão como depois é que os dados vão lá ficar gravados. Se é com a função malloc para alocar memória.
 
ou declaras opcao como char ou fazes como eu fiz ali em cima, tiras as pelicas dos cases

mas se isto é assim tão novo como dizes não devias começar por algo mais básico? programas simples que usem uma estrutura case por exemplo, porque parece que ainda nem percebes bem como ela funciona

e sistemas de menus como este normalmente envolvem ciclos e muitos selects pelo meio
 
Código:
case '1': printf("Registar Pecas/Acessorios");
case '2': printf("Consulta de Pecas/Acessorios");
case '3': printf("Registo de carros");
case '4': printf("Consulta de carros registados");
case '5': printf("Associar Peças/Acessórios a carros");
case '6': printf("Consulta de Pecas/Acessorios (por carro)");
case '7': printf("Consulta de carro (por peca)");
case '8': break;
tens aqui mais erros. se opcao é um inteiro nao podes comparar com texto, e faltam os breaks no fim de cada case. vendo o teu case '8' acho que não percebeste bem o uso daquilo. o correcto é:

Código:
case 1: 
   printf("Registar Pecas/Acessorios");
   break;
case 2: 
   printf("Consulta de Pecas/Acessorios");
   break;
case 3: 
   printf("Registo de carros");
   break;
case 4: 
   printf("Consulta de carros registados");
   break;
case 5: 
   printf("Associar Peças/Acessórios a carros");
   break;
case 6: 
   printf("Consulta de Pecas/Acessorios (por carro)");
   break;
case 7: 
   printf("Consulta de carro (por peca)");
   break;

Pode meter também um "default:" para prevenir os casos em que o utilizador insira algo diferente dos casos previstos...
 
Pois mas este é um projecto de final deste semestre, e o que fizemos ao longo do semestre nas aulas nem se relaciona muito com isto. Daí estar assim um pouco à toa. Segundo o professor vou ter que usar arrays e structs, porque vou ter de fazer listas dos modelos ou dos carros e das peças também. :s

Estive a fazer um esboço no caderno de uma struct neste caso para os carros; Acham que isto está correcto ? é a partir daqui que vou poder depois registar os carros ?

struct mota_reg {

char *tipo;
char *modelo;
int cilindrada;
int potencia;
float preco;
struct registo lr[30]

}
 
Última edição pelo moderador:
Estive a fazer um esboço no caderno de uma struct neste caso para os carros; Acham que isto está correcto ? é a partir daqui que vou poder depois registar os carros ?

struct mota_reg {

char *tipo;
char *modelo;
int cilindrada;
int potencia;
float preco;
struct registo lr[30]

};

muito importante o ; no fim da struct :cool:

depois no teu programa principal podes criar novos elementos do tipo struct mota_reg fazendo:
mota_reg ferrari;

e podes aceder aos elementos fazendo:
ferrari.potencia;
:D
 
a scruct é como se fosse um tipo de dados. além de int, char, float, passas a ter mota_reg

declarando mota_reg ferrari passas a ter a variavel ferrari, cujo conteudo são na verdade essas 6 variaveis que definiste na struct

então tens a variavel ferrari, mas o que tu queres realmente são as variaveis que estão "dentro" dela, para aceder a ela fazes por exemplo ferrari.tipo, ou ferrari.modelo
 
hmm ja estou a apanhar a ideia !
entao por exemplo: tendo isto..

ferrari.modelo[0]=350 spyder;
ferrari.modelo[1]=F750;

está a adicionar na estrutura de dados esses elementos ?
 
depende
na struct que puseste a variavel modelo é um ponteiro
tem que estar a apontar para alguma coisa

mas podes fazer por exemplo ferrari.preco=50000
 
hmm e se eu fizer:

char tipo[50];
char modelo[50];

estou a dizer que existem 50 tipos e 50 modelos de carros e ai ja posso fazer o tal ferrari.modelo[0]=350 spyder ? É que depois para imprimir isto no ecrã tem de ser à base de printf's e se estiver a colocar ja algumas posições deste array vai aparecer por ordem mas e depois se eu quiser acrescentar alguma coisa quando correr o programa ?
 
Pessoal como é que eu a partir do menu que tenho em cima, escolho a opcão que quero e depois ao escolher e entrar dentro dessa opcão aparecer as coisas para poder preencher e ficar gravado ?

Por exemplo:

1 - Registar peças -> escolho esta opcão e depois aparecer:

Tipo de peça: __________
Designação da peça:___________
Preço:_________
Marca:_________


Alguém me pode dar umas dicas de como é o código ?
 
Pessoal como é que eu a partir do menu que tenho em cima, escolho a opcão que quero e depois ao escolher e entrar dentro dessa opcão aparecer as coisas para poder preencher e ficar gravado ?

Por exemplo:

1 - Registar peças -> escolho esta opcão e depois aparecer:

Tipo de peça: __________
Designação da peça:___________
Preço:_________
Marca:_________


Alguém me pode dar umas dicas de como é o código ?
printf() e scanf()?
 
pois mas meto isso dentro de cada "case" de cada opção ? Não vejo como é que ao introduzir os dados depois fica lá gravado no programa.. para depois poder consultar listas dessas peças neste caso.
 
pois mas meto isso dentro de cada "case" de cada opção ? Não vejo como é que ao introduzir os dados depois fica lá gravado no programa.. para depois poder consultar listas dessas peças neste caso.
O melhor é mesmo definires uma função para cada uma dessas opções e chamar essa função dentro do switch.
 
uma função por exemplo:

void setdadospecas (............) {

tipo:
designacao:
preco:
marca:


}

? e depois outra funçao por exemplo void exibedadospecas (...) etc.. ? :S
 
Back
Topo