Ir ao conteúdo
  • Cadastre-se
yDuba

C Array struct e registro

Posts recomendados

Olá, estou tentando realizar a seguinte tarefa: Listar propietarios das placas dos carros que iniciam em A e finalizam em 0,2,7. Entretanto não esta funcionando, a variavel responsavel pela impressao apenas o ultimo valor lido.

//leitura da vairavel que eu queria colocar em fgets mas a mesma não funcioana
scanf("%s",&reg[i].placa);
.
.
.
.

CAD listaB(CAD reg[], int nreg){
        int j;
		for(j=0;j<nreg; j++){
                if(reg[j].placa[0]== 'a'){
                       		if(reg[j].placa[5]==0 || reg[j].placa[5]=='2' || reg[j].placa[5]=='7'){
                            printf(">>%s PLACA %s\n",reg[j].nome,reg[j].placa);
                        }
                }
        }
}

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@yDuba    no struct precisa colocar o tamanho da variável placa ,  e na hora de comparar verificar se for A maiúsculo ou minúsculo ,  assim :

struct carro{
    char placa[30];
    char nome[ 30];
];
struct carro reg[10];
  
if(toupper(reg[j].placa[0]=='A'){

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 minutos atrás, devair1010 disse:

@yDuba    no struct precisa colocar o tamanho da variável placa ,  e na hora de comparar verificar se for A maiúsculo ou minúsculo ,  assim :


struct carro{
    char placa[30];
    char nome[ 30];
];
struct carro reg[10];
  
if(toupper(reg[j].placa[0]=='A'){

 

Mas nao é para verificar se é maiusculo, e sim se a letra A inicia na primeira posição da placa, e 2 ou 0 ou7 fincaliza o final de uma placa, se sim imprimir o propietario desta placa.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@yDuba   sim , mas como está a variável placa lá no struct ?    e  o toupper vai verificar se a primeira letra da variável é a letra 'a' e se for  'a'   ou  'A'   também será aceita , independente  se foi digitado maiúscula ou minúscula .

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 Só que assim, independente dela ser maiuscula ou minuscula, essa sintaxe esta dando errado ;-;

typedef struct{
        char nome[200];
        int chassi;
        int modelo;
        char marca[30];
        char cor[20];
        int combustivel;
        int ano;
        char placa[3];
}CAD;

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@yDuba    sua variável placa está com apenas três posições ,  experimente colocar um zero depois desse três .

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 mas em que isto implica? pois tipo, o tamanho da minha placa serve apenas para dizer a quantidade de numeros que quero guardar nela, logo se estou fazendo placa de 'carros', devo usar um tamanho menor. Ou não?

adicionado 2 minutos depois

@devair1010 deixarei o enunciado aqui :listar todas as placas e os proprietários dos veículos que comecem com a letra 'A' e terminem com '0', '2' ou '7'. DICA: faça com que a placa seja um vetor de caracteres!

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@yDuba       sim , você pode usar o tamanho que quiser , mas precisa ser no mínimo o tamanho que comporte o total de caracteres , e que no caso são 6 caracteres uma letra e cinco dígitos , pois você está comparando o caractere na posição 5 , então esse sexto caractere está na posição 5 e na declaração você colocou que essa variável tem três posições  ,  assim quando você verifica a posição 5 pode ser um caractere que não foi digitado ,  e testei esse código aqui , e está funcionando bem  :

#include <stdio.h>
typedef struct{
        char nome[200];
        int chassi;
        int modelo;
        char marca[30];
        char cor[20];
        int combustivel;
        int ano;
        char placa[6];
}CAD;

CAD listaB(CAD reg[], int nreg){
    int j;
    for(j=0;j<nreg; j++){
        if(reg[j].placa[0]== 'a'){/* o zero precisa das aspas simples */
            if(reg[j].placa[5]=='0' || reg[j].placa[5]=='2' || reg[j].placa[5]=='7'){
                printf(">>%s PLACA %s\n",reg[j].nome,reg[j].placa);
            }
        }
    }
}
int main(){
    int j,i=0;
    CAD reg[10];
    strcpy(reg[i].nome,"kiko");
    scanf("%s",&reg[i].placa);

    listaB(reg,5);

    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!