Hiccup 0 Denunciar post Postado Outubro 1, 2013 Boa noite galera, Estou tendo na faculdade programação em C/C++ e tenho um exercício para resolver. Preciso montar um algoritmo com uma pequeno menu que armazena até 10 registros, sendo eles: placa, marca, modelo e valor. É preciso utilizar struct ... :upset: O exercício também pede para que as variáveis placas sejam inicializadas com 0, esse valor irá indicar que o campo está livre para cadastro. Quando um registro for efetuado pelo usuário, o algoritmo deverá verificar se há campos livres, placa = 0, se tiver, ele permite o usuário efetuar o registro, caso contrário, avisa que todos os campos estão preenchidos. Alguém poderia me dar uma força com esse algoritmo?! #include <stdio.h> #include <stdlib.h> #include <string.h> //Declaração das variáveis e da estrutura int i, op; //Os tipos das variáveis e tamanho dos campos foram estipulados pelo exercício struct automoveis { char placa[8]; char marca[50]; char modelo[50]; float valor; }; struct automoveis banco[10]; // Função para inserir void inserir() { //Verifica pelo indice se a posição está livre for(i = 0; i < 10; i++) { if(banco[i].placa == "0000000") { break; } } //Verifica pelo valor de i se estão todos preenchido ou não if(i != 9){ printf("\t Placa: "); scanf("%s", &banco[i].placa); printf("\t Marca: "); scanf("%s", &banco[i].marca); printf("\t Modelo: "); scanf("%s", &banco[i].modelo); printf("\t Valor: "); scanf("%f", &banco[i].valor); } else { printf("\t Todas as posicoes estao preenchidas!"); } printf("\n\t "); system("pause"); op = 0; system("cls"); } // Função para exibir void mostrar() { printf("\t Placa: "); printf("\t Marca: "); printf("\t Modelo: "); printf("\t Valor: \n"); //Lista todos os registros efetuados, ou seja, somente aqueles com placa diferente de 0 for(i = 0; i < 10; i++) { if(banco[i].placa != "0000000") { printf("\t %s", banco[i].placa); printf("\t %s", banco[i].marca); printf("\t\t %s", banco[i].modelo); printf("\t\t %.2f \n", banco[i].valor); } } printf("\n\t "); system("pause"); system("cls"); } //Função principal int main() { //Preenche todos os campos placa com o caracter 0 for(i = 0; i < 10; i++) { banco[i].placa = "0000000"; } //Mantem o menu ativo while(op != 3){ printf("\n\t MENU PRINCIPAL \n\n"); printf("\t 1 - Inserir \n"); printf("\t 2 - Mostrar \n"); printf("\t 3 - Sair \n\n"); printf("\t Escolha uma opcao: "); scanf("%d", &op); switch(op) { case 1: printf("\n\t I N S E R I R \n\n"); inserir(); break; case 2: printf("\n\t M O S T R A R \n\n"); mostrar(); break; case 3: printf("\n\t Sistema encerrado!"); printf("\t "); break; default: printf("\n\t Opcao invalida. \n"); } } printf("\n\n\t "); system("pause"); return 0; } Mais uma vez, obrigado pela ajuda! Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Outubro 1, 2013 Está ocorrendo algum erro? Algum problema? Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Outubro 2, 2013 A comparação de strings está errada. O programa atualmente tenta comparar ponteiros. Use strcmp/strncmp. Compartilhar este post Link para o post Compartilhar em outros sites
Hiccup 0 Denunciar post Postado Outubro 2, 2013 Está ocorrendo algum erro? Algum problema? Olá Neelix, Quando eu tento compilar, ele acusa erro no for dentro do main ... :upset: Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Outubro 2, 2013 Acusa erro neste for porque, como o guidjos colocou no post dele, está fazendo comparações de string de forma errada. http://www.cplusplus.com/reference/cstring/strcmp/?kw=strcmp Obs.: Para facilitar a ajuda, poderia ter colocado que erro o compilador acusou... Compartilhar este post Link para o post Compartilhar em outros sites
Hiccup 0 Denunciar post Postado Outubro 2, 2013 Olá GBecker, Foi mal, a mensagem de erro é essa abaixo: C:\...\Códigos Fonte\C & C++\Exercícios\exercicio_3.cpp In function 'int main()': 80 26 C:\...\Códigos Fonte\C & C++\Exercícios\exercicio_3.cpp [Error] invalid array assignment Quando tento compilar ele já dá esse erro acima. O for que faz comparação está em uma função fora do main(){}. Eu fiz a alteração como o guidjos sugeriu e a parte de comparação está normal. O problema é iniciar o algoritmo e ele preencher o camp placa com 0 (zero) sozinho. Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Outubro 3, 2013 Nesta linha: banco.placa = "0000000". Está o erro. Voce não pode fazer atribuições de string como se fosse um inteiro ou float. Deve utilizar alguma função da biblioteca padrão ou fazer na mão através de poteiros. Recomendo que você estude mais sobre string. Se você ler o retorno do compilador, já vai saber qual o problema. http://www.cplusplus.com/reference/cstring/strcpy/?kw=strcpy Compartilhar este post Link para o post Compartilhar em outros sites