1
resposta

Como avisar que o vetor foi repetido numa struct

Trouxe quase a mesma dúvida num fórum anterior, como avisar que o vetor foi repetido mas agora um vetor numa struct.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>

struct nomeStruct{ int codigo[100], qtd; float divida; char nome[100];

}locadora[100];

int main() { int i, j, k; char terminar[1];

do{ i++; fflush(stdin); printf("Digite o nome do devedor "); fflush(stdin); scanf("%s", locadora[i].nome);

printf("Digite o codigo do devedor ");
scanf("%d", &locadora[i].codigo[i]);
  for(k = 0; k <= locadora[i].codigo[99]; k++){
    for(j = 0; j <= k - 1; j++){
      printf("codigo repetido, tente novamente ");
      scanf("%d", &locadora[i].codigo[i]);
    }
  }
printf("Digite o valor da divida ");
scanf("%f", &locadora[i].divida);

fflush(stdin);
printf("Quer terminar? (s/n)");
fflush(stdin);
scanf("%s", terminar);
fflush(stdin);

}while(strcmp(terminar, "n") == 0);

return 0; }

1 resposta

Boa noite, Jefferson.

Existem alguns problemas no seu código.

A variável qtd da struct não está sendo utilizada.

Locadora não precisa ser um vetor. Lembre-se, você só tem uma locadora. O vetor deve ser apenas a lista de códigos. Então sua struct deveria ficar:

struct nomeStruct{
    int codigo[100], qtd;
    float divida;
    char nome[100];
}locadora;

Com essa alteração, remover os [i] nos locais onde acessa os atributos da locadora, ficando apenas locadora.divida, locadora.codigo[i] e locadora.nome.

A variável terminar poderia ser apenas um caracter simples (char terminar;) e você utilizaria o scanf usando "%c" e no while iria comparar usando ==. Desse jeito:

char terminar[1];
...
    scanf("%c", &terminar);
    fflush(stdin);
} while(terminar == 'n');

Caso ainda queira usar a variável terminar como vetor de caracteres, aumentar seu tamanho para 2, pois no final de todo vetor de caracteres é adicionado um caracter '\0' para informar o final do texto.

As variáveis i e qtd não foram inicializadas, então quando fizer i++, ela estará incrementando algum valor desconhecido. Então faça int i = 0, qtd = 0; para iniciar. Também troque a posição de incremento do i para o final do vetor, pois do modo que está, você vai começar acessando o vetor na posição 1, e não na 0.

Não está incrementando a quantidade. (qtd++)

Por fim, você não está comparando os códigos dentro dos laços de j e k, você apenas imprime e fica solicitando novamente o código. Adicione um if comparando o código lido do teclado com os códigos informados.

Continue se esforçando! Bom trabalho!