Ir para conteúdo
Fórum Script Brasil
  • 0

Erro ao verificar se string introduzida pelo utilizador já existe num


satbr

Pergunta

Estou aqui com uma dúvida que não estou a conseguir ultrapassar e já tentei de várias maneiras. Estou a fazer um programa que entre outras coisas o utilizador tem que inserir dados sobre um produto em que o número de série tem que ser único e do tipo char. Ou seja é introduzida uma string e tenho que verificar se essa string já existe na estrutura de vetores. O que está a acontecer é que quando introduzo o número de série do 1º produto o programadiz que já existe um produto com esse numero de série apesar de ser o 1º que estou a registar.



Eis o código que tenho:

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    char numeroserie;
    char descricao;
    float preço;
} stProduto;
/********************** Funcoes dos produtos *************************/
void inserirProduto(stProduto produtos[], int *contadorProdutos);
int procurarNumeroserie(stProduto produtos[], int contadorProdutos, char produtoAProcurar);

int main()
{
    stProduto produtos[500];
    int contadorProdutos=0;
    inserirProduto(produtos,&contadorProdutos);
    return 0;
}
void inserirProduto(stProduto produtos[], int *contadorProdutos)
{
    char string1;
    char posicao;
    do
    {
        printf("Introduza o numero de serie do produto:");
        scanf("%s",&string1);
        posicao =  procurarNumeroserie(produtos,*contadorProdutos, string1);
        if (posicao == 0)
        {
            printf("já existe um produto com esse numero de serie!!!\n");
        }
    }
    while(posicao == 0);
    strcpy(produtos[*contadorProdutos].numeroserie,string1);
    (*contadorProdutos)++;
}
int procurarNumeroserie(stProduto produtos[], int contadorProdutos, char produtoAProcurar)
{
   int i;
    char posicao;
    posicao = 0;
    for(i = 0 ; i < contadorProdutos ; i++)
    {
        if (strcmp(produtos[i].numeroserie, produtoAProcurar) == 0)
        {
            posicao=i;
            i=contadorProdutos;
        }
    }
    return posicao;
}

Alguém me pode ajudar por favor!! É que já estou a ficar desesperado.

Desde já o meu obrigado.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

vamos lá kk

1- Não se pode usar cedilha float preço;, mude isso para valor ou preco sem cedilha. Dentro da estrutura claro, linha 7. Arrumar todas as variáveis afetadas.

2- Na linha 24 você tenta ler um array de chars (também chamado c_string ou simplesmente string. Olho! Não tem nada que ver com string de c++, o string de c++ é uma classe, c não possui classes. valeu?). O problema é que na linha 20 que é onde você declara essa variável, você declara ela como char. E pergunto... É um string verdade? Si for um string, mesmo porque esta tentando ler com o modificador %s na linha 24, não devemos por & adiante do string, então troque scanf ("%s", &string1); por scanf ("%s", string1);. E por suposto na linha 20 você tem que trocar o char string1; por char string1[100];, pois o primeiro só podemos guardar uma letra, e com char string1[100]; podemos guardar 100 letras. para ler isso como disse antes scanf ("%s", string1); sem &. O operador & somente colocamos ele em inteiros, flotantes, doubles, chars, etc... Não pomos ele no scanf quando vamos ler um c_string nem quando vamos ler ponteiros, pois ele é muito semelhante aos ponteiros. Leia más sobre arrays de chars para entender melhor.

3- Linha 26. Nessa linha você tenta comparar posicao com 0, porem posicao é do tipo char, e a comparação correta é posicao == '0', si posicao fosse um inteiro então estaria correto. Check a linha 21.

De igual modo posicao, declarado na linha 21, e que ganha o valor na linha 25 que é retornado pela função procurarNumeroserie (...), essa função retorna um int, e como falei a variável declarada na linha 21 é tipo char. Conclusão, um grande erro, acho que seria melhor trocar o tipo de char para int ou fazer que tudo seja coerente.

4- linha 30. Como falei que string1 não é um string, si não que é um char, nessa linha, (strcpy (produtos[*contadorProdutos].numeroserie, string1);) nem produtos[*contadorProdutos].numeroserie nem string1 são strings, si você for a sua estrutura na linha 5 stProduto char numeroserie; não é um string e sim um char.

5- Linha 38 mesmo erro, você acha que esta tratando um c_string e esta tratando um char.

Nem vou olhar mais nada, todos os erros são por que você não sabe a diferença entre char letra e char grupodeLetras[ ].

Está seguro que você aprendeu arrays??? Arrays não são a mesma coisa que variáveis simples.

Tente arrumar isso e si não conseguir volte.

muita sorte e paciência.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...