Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hiccup

Briga com struct ...

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.