Jump to content
Fórum Script Brasil
  • 0

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


satbr

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...