Ir ao conteúdo

arfneto

Membro Pleno
  • Posts

    6.526
  • Cadastrado em

  • Última visita

Tudo que arfneto postou

  1. Você incluiu o texto da pergunta junto ao código e aí ficou bem difícil de ler... E acho que não perguntou o que queria mesmo perguntar... Para o usuário definir quantos vão entrar você apenas pergunta a ele. Mas se quer que o programa funcione para um número arbitrário de operadores depois do operando pode fazer o simples: lembrando do ensino fundamental, comece com o elemento neutro, zero para soma e subtração ou 1 para multiplicação. Para divisão o que faz mais sentido é começar a dividir o primeiro pelo segundo e seguir daí dividindo pode fazer algo como @Mauro Britivaldo sugeriu No entanto Não é um backspace que separa os argumentos. backspace não pode ser lido da entrada com esses comandos Mas o mais simples é ler usando scanf() mas usar o valor de retorno. Parece ter uma lei que impede as pessoas de usar isso. Em um loop, Você usa scanf() para ler um número e enquanto ela devolver um número você aplica o operador. Quando não vier nada você para e mostra o resultado. Só isso. scanf() e todas as outras da família devolvem o total de itens lidos. Apenas use para controlar o loop. Não deve dar 10 linhas de programa
  2. Onde arrumar M e O não é relevante. São apenas valores. Se são constantes você pode declarar lá. Se são variáveis você pode ler. Se você não sabe o que são ou de onde vem, esqueça simplesmente. O relevante é você saber que Certo? Entendeu o que eu expliquei? Nas linguagens tema desse forum você não pode declarar assim. Deve fazer como eu expliquei inicialmente. Isso vale para todos os seus programas. Com ou sem M e O.
  3. O que é m e o que é o? Acho que perguntei isso não entendo
  4. já está incluída. Como foi declarada numa seção private só pode ser acessada por métodos --- funções --- da classe Inimigo. Só que sua classe é muito simples e nem tem outras funções. É só um exercício. Ela como private de nada serve. Se quer que ela seja pública declare como tal. Só isso. Não é como em java. Em C++ não existe um modificador de acesso na verdade. Apenas trechos public/private na declaração de classe. Veja esse exemplo: class Inimigo { private: string nome; private: double vida; public: double outra_vida; double nova_vida; public: void atacar() { cout << "Inimigo Atacando" << endl; }; public: Inimigo(string nome, double vida) : nome(nome), vida(vida) {}; bool estouVivo(){ return vida >= 0; } };
  5. Sim n tem que poder ser avaliado em tempo de compilação. Tem que ser uma constante. Se quer alocar a partir do valor n que leu tem que fazer as contas do tamanho e alocar a memória necessária, algo como n*sizeof(int) seria o tamanho e usaria mallloc() para alocar esse número de bytes adicionado 0 minutos depois o que é m? o que é o? vai ler isso também?
  6. Não entendi. Como sabe que tem um erro? O que é warning 5%? 3 4 5 TRIANGULO: 6.000 CIRCULO: 78.540 TRAPEZIO: 17.500 QUADRADO: 16.000 RETANGULO: 12.000 No computador que estou usando mostrou isso
  7. Esse IDE que você usa, Dev-C++, não tem um compilador. É só uma capa em torno de um compilador e de de um debugger, ou de vários deles e outras ferramentas também. gcc é o compilador C padrão do Linux mas esse Dev-C++ instala uma versão para Windows desse tal gcc. E em geral pode usar perfeitamente para escrever programas para Windows e pro Linux/Unix/MacOS. A Microsoft, que escreveu o Windows, tem seu próprio compilador. E em alguns poucos casos um iniciante pode bater em alguma diferença entre esses compiladores. E essas estruturas em torno de time.h são exemplo disso. Como você não postou qualquer código, entenda que por isso disse que não sei do que você está falando quando cita %.8f por exemplo...
  8. Acho que sabe que não sei de que resultado está falando... Leu até o final o que eu escrevi? Inclusive a parte sobre o gcc?
  9. Esse link no canto superior direito funciona de certo modo como compartilhar o desktop no Skype, mas voltado ao projeto que está aberto. Um cara do grupo tem o controle de cada vez. Todos tem acesso ao chat e todos veem o cursor e o ponteiro do mouse e o que o controlador está fazendo. Mesmo quando ele muda de um arquivo para outro. Assim você pode pedir para alguém dar uma olhada no seu projeto e acompanhar o que ele está fazendo ao vivo. Até 30 pessoas, tipo uma sala de aula pequena. De graça. adicionado 11 minutos depois Colocar um nome de variável aí é opcional e não serve para nada. Mas iniciantes em geral ficam confusos quando não tem variáveis no protótipo e então eu quando me lembro coloco algo. c é o endereço de uma struct Carro e a função recebe isso e mostra na tela. Assim se sabe se sabe tudo que foi lido. Pode e deve declarar int le_um_carro(Carro*); int le_um_cliente(Cliente*); int mostra_um_carro(Carro*); int mostra_um_cliente(Cliente*); Mas muitas vezes apenas por clareza se escreve algum valor ali, como: int le_um_carro(Carro* UmCarro); int le_um_cliente(Cliente* cliente); int mostra_um_carro(Carro* x); int mostra_um_cliente(Cliente* y); Sobre os %s %s não entendi sua dúvida. É um printf(). Cada %s é um parâmetro... Como usou em todo o seu programa... Esse printf() printf("Marca/Modelo: %s %s Cor: %s Placa: %s Entrada: %s \n", c->marca, c->modelo, c->cor, c->placa, c->ano ); como te disse lá mostra Marca/Modelo: Ford Taurus Cor: Azul Placa: ABC1212 Entrada: 2020 Se o cara digitou Informe o numero da placa [7 digitos]: ABC1212 Informe a marca do veiculo: Ford Informe o modelo do veiculo: Taurus Informe a cor do veiculo: Azul Informe o ano do veiculo: 2020 Naquele código de teste. E assim você continua no programa seguro de que leu direito. E toda vez que quiser testar pode só chamar a função e não ficar repetindo código.
  10. pois é: atacar() é private. Só pode ser usado dentro da classe. E main() não está dentro da classe Inimigo então atacar() não pode ser acessado aí E aí vem a mensagem de que é inacessível. Faz sentido. private é privado, public é publico. É a definição. Você tem um livro? Recomendo muito ter um livro. Muito mesmo. Um bom livro e ler. Uma tarde ao menos. structs, inicialização, construtores. Um mínimo. Entendo. Mas public/private é o mínimo ao declarar em uma classe. E ao menos public acho que é praticamente obrigatório para um iniciante saber o efeito porque se declarar o construtor e não especificar public não consegue sequer criar uma variável da classe. Encolhendo um pouco a sua declaração e criando um construtor padrão, veja: class Inimigo { string nome; double vida; void atacar() { cout << "Inimigo Atacando" << endl; } Inimigo(string nome, double vida) : nome{ "John Doe" }, vida{ 1.4 } {}; Inimigo(string nome, double vida) { this->nome = nome; this->vida = vida; } bool estouVivo() { return vida >= 0; } }; Nada de public/private. E aí se tentar declarar: Já não compila mais. Dá erro nas duas tentativas. Então se declarou ao menos uma classe até hoje já passou por isso... Se não quer usar isso apenas declare struct e não class. Espero que tenha ajudado
  11. arfneto

    C++ Como se usa const char*

    const nada tem a ver com char* usando os dois juntos apenas indica ao compilador que area apontada pela variável não vai ser alterada. Desse modo o compilador já gera erro quando tenta atribuir algo por exemplo. No caso de char* const é bem importante O que acontece é que se você tem uma função que recebe um parâmetro char* como int uma_funcao(char*, int); E escreve int uma_funcao( char* mensagem, int valor ) { printf("Mensagem: '%s' valor %d\n", mensagem, valor); return 0; }; Você pode chamar int res = uma_funcao("valor da contagem: ", -345); Até aí tudo certo. Mas aí vem o diretor e diz para converter a primeira letra para maiúscula "porque é o que o mercado quer" E você faz o simples: int uma_funcao( char* mensagem, int valor ) { if( (mensagem[0] >= 'a') && (mensagem[0]<= 'z') ) mensagem[0] -= 32; // equivale a converter para maiuscula printf("Mensagem: '%s' valor %d\n", mensagem, valor); return 0; }; se você rodar isso seu programa deve cancelar com uma mensagem sobre violacão de acesso ou algo assim... Porque nesse caso a função foi chamada com uma constante, um literal. Não dá para alterar Mas se você declara como const e tenta int uma_funcao( const char* mensagem, int valor ) { if( (mensagem[0] >= 'a') && (mensagem[0]<= 'z') ) mensagem[0] -= 32; // equivale a converter para maiuscula printf("Mensagem: '%s' valor %d\n", mensagem, valor); return 0; }; o programa desta vez não compila e te avisa porque. Antes dele rodar na máquina de alguém e dar erro. Veja um exemplo: Claro que a mensagem sai em português se seu ambiente usa essa linguagem. Mas veja a linha vermelha e a mensagem do erro se põe o ponteiro do mouse lá: "expressão deve ser um valor modificável" assim que você tenta alterar uma letra do campo Claro que esse é um exemplo simplista, mas acho que dá pra entender. Tem outras muitas razões para usar isso. Uma importante é que ao saber que isso não pode mudar o compilador pode otimizar o código e mover as constantes para outras partes do código e conseguir alguma vantagem. Em C++ você também pode declarar métodos e classes inteiras const, e pode declarar o valor apontado como const também...
  12. Prisma é aquele saco de areia com um número grande em cima e que tem um imã dentro. Ao chegar o carro num estacionamento que use isso o manobrista pega um desses e põe no teto do carro e sai com o carro pro pátio e estaciona. Aí vê a vaga em que deixou o carro -- em geral tem uma marca no chão e/ou na parede -- e marca no sistema vinculando prisma/vaga No ticket do cliente tem o número do prisma e assim fica fácil ver de longe onde está o carro, já que o prisma fica no teto e a placa no chão Você pode comprar uns em https://prismaparaestacionamento.com.br/ na minha cidade Não sou indicado para recomendar algo sobre o Code::Blocks Apenas diria para desinstalar. É o IDE mais antigo e pobre que já tentei usar, isso apesar de que, depois de anos sem atualizações, ganhou uma versão nova esse ano. Problemático no mínimo. Se posso ver alguma vantagem é a aparente simpatia que as escolas tem por esse troço. Nada mais. "Follow the money" --- siga o dinheiro: em geral dá certo. Veja os produtos mais caros ou das companhias que tem mais dinheiro, como Oracle e Microsoft e JetBrains e provavelmente lá estarão os melhores produtos. Para você ver a diferença: Com o Visual Studio da Microsoft eu, você, todos os caras de seu grupo, @herbertbahia e @Mauro Britivaldo podíamos seguir o programa juntos, ao mesmo tempo, pela internet, seguindo até a navegação e o ponteiro do mouse enquanto quem estivesse controlando a sessão navegando pelo arquivos do programa. Quem quisesse mostrar algo poderia pedir atenção. Com uma janela de chat ao lado. E a gente poderia propor e votar pelas alterações e incorporar ao programa quando você aceitasse. E você podia incluir até um total de 30 caras no grupo de revisão, todos vendo a mesma tela se fosse o caso. E salvando as versões e discutindo as alterações sem sair cada um de sua mesa. Mecanismos de inteligência artificial incorporados automaticamente identificam padrões de código no projeto e propõe os ajustes, acrescentando uma estrelinha na opção que parece mais comum na lista de sugestões de parâmetros por exemplo As versões vão automaticamente para o GitHub, que a empresa comprou também . O maior depósito de código do mundo, e agora de graça. Não dá pra competir. Veja uma versão do seu programa mas algo que te mandei e um exemplo da saída, gravados lá com 1 clique, de graça, em https://github.com/ARFNeto-CH/ch-200623-estac Eclipse é legal, Clion é legal. VS Code é muito bom. Dev-C++ é simples mas muito rápido. E tem editores que são muito muito bons, como Atom, Sublime Text e outros.... Bom que deu certo e que você não desistiu e deixou incompleto. Parabéns
  13. Seu professor não fez aquilo que ele devia fazer, ensinar? Não deu nenhum detalhe, nada? O que você encontrou em vetores? Você não vai implementar. Já é uma biblioteca. As funções estão lá. Apenas use o #include e chame as funções. Esta usando Windows ou Unix/Linux/Mac? Vai programar em C++ como marcou no tópico? Num exercício de adivinhação, imagino que seu professor apenas queira que você use funções e estruturas declaradas em time.h para medir os tempos de execução do sort Windows Pode usar clock() que devolve o tempo desde o início do processo, em unidades de CLOCKS_PER_SEC. É o mais simples. clock_t antes = clock(); ... clock_t agora = clock(); E aí para saber o tempo em segundos divida o valor por essa constante: (agora-antes) / CLOCKS_PER_SEC Ou ainda se estiver usando windows, use a estrutura timespec que é isso struct timespec { time_t tv_sec; // Seconds - >= 0 long tv_nsec; // Nanoseconds - [0, 999999999] }; e as rotinas como timespec_get() documentada em https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1?view=vs-2019 Declaradas assim int timespec_get( struct timespec* const time_spec, int const base ); int _timespec32_get( struct _timespec32* const time_spec, int const base ); int _timespec64_get( struct _timespec64* const time_spec, int const base ); Se usa Windows, considere usar a documentação da Microsoft, que eu acho muito boa. Sobre as rotinas de tempo a documentação está em https://docs.microsoft.com/en-us/cpp/c-runtime-library/time-management?view=vs-2019 e acho muito bem escrita. E você pode baixar um PDF. E vi agora https://docs.microsoft.com/pt-br/cpp/c-runtime-library/time-management?view=vs-2019 que tem em português do Brasil esse tópico Importante MESMO Esse tema em Windows/Unix/C/C++ é um inferno porque aqui o Windows e o Unix diferem e algumas estruturas são o diabo para portar de uma plataforma para outra. Espere problemas se vai portar algo de um sistema para outro. E se vai escrever pros dois simplesmente recomendo esquecer e escrever duas versões. Mais ainda: se usa o compilador gcc em Windows pode ter os mesmos problemas. A ponto de ser melhor, se usa Windows e bater com algum problema, simplesmente instalar o compilador da Microsoft e escrever seu programa, gerar o EXE e esquecer o assunto. Believe me.
  14. Ainda sobre isso, eu vou repetir o que eu disse acho que já no primeiro post sobre isso e em muitos outros nessa discussão: O sistema tem que refletir a realidade, ou na concepção inicial ou nos remendos a partir do início. Quanto melhor o modelo menos trabalho. Carros tem donos e donos tem carros Vagas tem carros e carros tem vagas Esse programa não tem os vínculos básicos. E mais cedo ou mais tarde eles vão faltar. A estrutura de cliente deve ter um vetor para os carros do cliente A estrutura do carro tem que ter um indicador para o dono do carro O carro ao entrar ganha um prisma ou no minimo um numero de ticket Em geral o carro na vaga tem um prisma associado Em geral um campo int ID ou NSU já resolve. Hoje só se faz isso com bancos de dados, porque é mais fácil e barato (grátis)
  15. é boa a ideia de colocar mais coisas da funcionalidade de um estacionamento no programa. Coisas tipo plano mensal, incentivo para usuário frequente e coisas assim. Mas perderam várias oportunidades de colocar recursos do mundo real dos estacionamentos: criar uma estrutura para as vagas. É assim que funciona. O estacionamento tem um número fixo de vagas. Criando uma estrutura, pode ser só um número, você pode facinho criar um mapa de ocupação do lugar. trivial e mostra os carros que estão nas vagas e quando entraram. Pegaria bem pro seu sistema e é só uma lista não ter a hora de saída e nem a de entrada (essa que você tirou) é fora da realidade. Estacionamento é isso: aluga espaço por períodos, e você não tem isso no seu modelo criar uma estrutura de prisma. Mais realidade: o prisma é colocado no carro e associa o carro à vaga que você também não tem. Na hora de sair você gera uma ordem de saída com o prisma do carro e a vaga. E grita pro manobrista da vez:" prisma 34 na vaga 19B, vermelho"... Facinho de implementar Gerar um recibo. Eu até te mostrei um modelo. De verdade. Basta copiar de algum estacionamento, como esse que mostrei Implementar ler e salvar para arquivo a situação do lugar. Bem real. Porque pode ter carros que ficaram no pátio de um dia pro outro Saldo instantâneo: quando tem pra receber dos carros que estão já no pátio Relatórios financeiros: quando até hoje? Permanência média dos carros, índice de retorno, coisas assim. Trivial também Mais notas O regime de mensalista é em geral um campo no cadastro de cliente O acúmulo de bonus é um vetor no registro do carro ou do cliente e você só precisa marcar a presença. tipo 10 posições para o bonus a cada 10 estadias. teria ganho muito escrevendo uma função de leitura, que você podia chamar para todas as leituras, deixando suas funções menores e sem tanto código duplicado que imagino que você tenha percebido... char* le_campo( char* campo, int tamanho, int opções); E tire aqueles goto de lá. Muitos professores e empresas simplesmente não aceitam. Pode perder pontos
  16. Crie o programa sempre em torno dos dados e não faça o programa antes de se entender bem com os dados. Como está começando, é a hora de adquirir esse tipo de hábito: o que faz resolver antes os problemas. Assim, sobre a entrada: São apenas 3 informações e não são usadas individualmente, Isso é muito importante de separar logo no início: isso quer dizer que não vai precisar gerar uma listagem de alunos, ou de livros, ou de músicas, como deve aparecer talvez já no próximo exercício. Não vai precisar salvar esses dados em lugar nenhum. Mas não pode deixar passar nada importante porque só vai ter as informações do último pesquisado: clube: vai ser usado na avaliação [1] [2] e [3]. Vai ser totalizado por torcida para o item [1] e usado para filtrar os salários no item [2] salário: vai ser usado na avaliação [2]. Só vai ser usada a soma dos salários agrupados por torcida, para levantar a média [2] cidade natal: vai ser usada na avaliação [3] para filtrar os torcedores que nasceram em SP. E os resultados: [1] número de torcedores por clube. São só dois clubes, Mas tem os caras que não torcem para nenhum dos dois. Então vamos acumular torcedores, que são números naturais, inteiros, em int torcedores_SP = 0; int torcedores_CO = 0; int torcedores_XX = 0; [2] média salarial dos torcedores de SP e CO. então vai ser preciso somar os salários desses dois grupos. Pode ser um inteiro sem centavos, já que não diz nada no enunciado. Então pode acumular em int salarios_SP = 0; int salarios_CO = 0; [3] Nascidos em SP que não torcem por SP ou CO. Como é só um filtro, basta contar quando o pesquisado nascido em SP (opção 1) marcou opção 3 na primeira pergunta, e apenas esses int De_SP_XX = 0; // nasceu em SP, nao torce nem para SP nem para CO [4] É uma bobagem, já que são fixas 10 pesquisas apenas. Não está claro que precisa de um menu, e não sei porque em geral o aluno já sai escrevendo um. Em geral uma pesquisa é um formulário. Não dá pra imaginar alguém sentado digitando isso. Um simples arquivo de 10 linhas assim #,Clube 1 SP 2 CO 3 Outros,Salario mensal em reais sem ponto,Origem 1-SP 2-Outras 1,1,1000,1 2,2,31000,2 3,3,12300,1 4,1,5500,2 5,2,18000,1 6,3,10200,2 7,1,15000,1 8,2,10400,2 9,3,10300,1 10,1,16000,1 Seria muito mais simples de tratar e de testar porque dá pra editar no próprio IDE ou com o bloco de notas um conjunto representativo de testes e eles não vão sumir assim que você tecla ENTER. Não entendo a atração por menus e leitura e printf() na tela. é lento e chato. e testar o programa dez vezes quer dizer entrar com 10 vezes isso tudo... Usando um arquivo como o acima você pode testar em segundos e ter vários arquivos de teste preparados. O primeiro número de cada linha é só um contador pra não se perder na conta e a primeira linha só uma legenda e depois despreza na leitura... É muito mais fácil ler do arquivo do que ler do teclado. E você não precisa escrever o editor de texto porque já vem no micro E sem contrariar o enunciado, temos só 10 pesquisas... Então daria pra usar constantes e fazer logo o programa. O enunciado não fala nada... Eis o que já temos, antes de começar o programa: int De_SP_XX = 0; // nasceu em SP, nao torce nem para SP nem para CO int salarios_CO = 0; int salarios_SP = 0; int torcedores_CO = 0; // 2 int torcedores_SP = 0; // 1 int torcedores_XX = 0; // 3 Uma ficha de pesquisa seria uma linha daquele arquivo, ou um grupo de dados. Uma pesquisa seria um conjunto de fichas, no caso 10. Já definimos que cada ficha tem 3 int, o clube, o salario e a origem do torcedor. Uma pesquisa seria um conjunto de fichas. Em C você agrupa dados como uma ficha sob o nome de struct, o que pode ser visto logo no início do livro de C. Qualquer livro razoável de C. Nada especial: struct ficha { int clube; int salario; int origem; }; E você agrupa variáveis iguais pelo nome, em algo chamado vetor, tipo int variavel[400]; declara 400 variáveis int que serão chamadas de variavel[0] a variavel[399]; Esse programa não precisa disso mas pode ser vantagem na hora de testar... Porque? Simples: uma pesquisa tem só 10 fichas então seria algo assim struct ficha pesquisa[10]; para dizer que a variável pesquisa é um conjunto de 10 fichas, toda a nossa pesquisa. Já começa a fazer sentido, certo? E é a realidade E para que isso? Porque a gente pode escrever assim: struct ficha pesquisa[10] = { { 1,1000,1 }, { 2,31000,2}, { 3,12300,1}, { 1,5500,2}, { 2,18000,1}, { 3,10200,2}, { 1,15000,1}, { 2,10400,2}, { 3,10300,1}, { 1,16000,1} }; E declarar os valores iniciais das mesmas 10 fichas do arquivo acima. Recortar e Colar. 10 fichas. Valores finais no nosso caso. E já tem os dados para fazer o programa na próxima meia hora, porque é só ler as fichas da pesquisa e somar nas variáveis que já estão definidas, calcular as médias, mostrar os resultados e já era. Compare isso com o tradicional de ficar sentado digitando ao menos uns 3 dados para cada teste com 3 campos para depois ao menos uma vez testar com 10 e entrar com 30 campos no teclado... Estou me dando ao trabalho de mostrar isso porque hoje eu tenho tempo e porque acho que isso se aplica a praticamente todos esses problemas que se vê aqui: comece pelos dados, leia de arquivos.E essa pesquisa já gravada no programa vai servir para testar quase tudo... Antes de voltar ao menu, por exemplo. Ler esses dados de um arquivo gastaria umas 10 linhas de programa apenas... Mas essa é uma coisa para outro dia...
  17. Sério? no tópico #109... Cada IDE tem suas funções... Uns são mais espertos outros são mais simples. Esse pelo qual você optou é o mais simples e antiquado. Acho que não tem essas funções...
  18. Não. Como eu tinha te explicado... Quando eu disse adivinhe o que eu queria dizer... É o simples. Todos os menus são assim.
  19. Em geral é melhor não comentar. Apenas escreva os protótipos e as funções vazias porque vai ter que escrer de qualquer modo... O próprio IDE pode fazer isso pra você. Veja por exemplo Criei testeX() o protótipo. Como não está aqui e em nenhum .h declarado, aparece a linha verde embaixo. Não é um erro, pode ser de propósito afinal. Mas se for algo que você deveria ter escrito veja lá em "Show potential...." na janela: Você tecla alt-Enter e o IDE cria pra você a função: E você pode escolher onde! E se eu escolher o primeiro: Não só ele cria a função com o valor de retorno certinho e o corpo e tal, como põe na mesma ordem em que estão declarados os protótipos. Como eu sempre declaro em ordem alfabética ele preservou... Basta por um valor qualquer para o argumento, que o IDE não ia adivinhar mesmo, e pronto. E veja que ele abre uma pequena janela dentro da janela de edição, para poder digitar nos dois lugares ao mesmo tempo sem ter que mudar de janela... adicionado 2 minutos depois Se você diz... as diz porque não entendeu o que te expliquei sobre o menu... Como te disse dias atrás, devia fazer o mais perto possível da realidade para ter mais facilidade e não tanto trabalho. Você apagou a estrutura que marcava o tempo ao invés de aumentar e colocar TAMBÉM a data de saída. Eu te mostrei até um ticket de estacionamento para ver se te inspirava... adicionado 10 minutos depois Isso foi o que eu te disse pra escrever int opcao = 0; Carro info; Cliente cliente; while (opcao != 5) // sair = 5 { opcao = menu(); switch (opcao) { case 1: le_um_cliente(&cliente); mostra_um_cliente(&cliente); break; case 2: le_um_carro(&info); mostra_um_carro(&info); break; case 5: break; default: printf("Opcao inesperada: %d\n", opcao); break; }; // switch() }; // while(); }; // main() Acho que dá pra ver como é mais simples... adicionado 11 minutos depois Ao entrar no loop mostra o menu. O menu devolve a opcao. A opcao controla o switch. A vida segue.
  20. Que pretende com isso? uma chave antes de main()? o que é int menu(); Se é um protótipo onde está a função? E agora tem até DOIS switch(opcao); Se leu isso, saiba que estou curioso pelas razões que teve para escrever assim...
  21. E você tem uma dúvida? É seu primeiro programa?
  22. Acho que não devia abrir dois tópicos com exatamente o mesmo título . . .
  23. Se ao final do menu você vai ler a opção com a qual pretende entrar no switch() pra executar o comando escolhido, Então não acha estranho se o menu estiver dentro do mesmo switch()? O menu não estava funcionando? Deixe onde está adicionado 0 minutos depois poste o código atual para alguém poder ajudar. está ficando confuso agora
  24. recortar e colar e eu colei errado... int main(void) { Carro info; Cliente cliente; int opcao = 2; switch (opcao) { case 1: le_um_cliente(&cliente); mostra_um_cliente(&cliente); break; case 2: le_um_carro(&info); mostra_um_carro(&info); break; default: printf("Opcao inesperada: %d\n", opcao); break; }; // switch() }; // main() Claro que assim ainda não está lendo a opção. Quando estiverem todas as funções aí você mostra o menu e lê a opção do usuário antes de entrar no switch, como estava no programa original adicionado 3 minutos depois passe esse menu e a leitura da opção para uma outra função para ficar mais simples. Apenas uma função int menu(); que retorna a opção lida antes antes de entrar no case. Acho que como estava antes.
  25. Não me surpreende que tenha dado erro ao você fazer isso. Recomendo muito mesmo que arrume um livro e estude esses conceitos básicos de tipos e loops e declarações. Você parece não ter noção de causa e efeito das coisas que vai mudando. Em geral você não muda uma linha sequer sem uma razão. E não escreva uma linha sem uma razão. Veja esse código de main() Carro info; Cliente cliente; int opcao = 2; switch (opcao) { case 1: le_um_cliente(&cliente); mostra_um_carro(&cliente); break; case 2: le_um_carro(&info); mostra_um_carro(&info); break; default: printf("Opcao inesperada: %d\n", opcao); break; }; // switch() }; // main() Recortar e colar. Apenas. E você traz o código das funções que está agregando, as que tratam cliente no caso. Nada mais. Acha que funciona assim? Claro que funciona. Apenas tenha critério. E não use variáveis globais. Em geral essas funções vão estar em arquivos separados. Então cada cara do grupo tem sua parte definida e envia os arquivos correspondentes, tipo carros.c e clientes.c e alguém cuida de main() em main.c. E as declarações acertadas antes entre todos estão em carros.h e clientes.h e a vida segue.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!