2015-07-03 6 views
1

структур Добрый день,Найти, если строка существует в векторе

Я здесь с сомнением, что я не в состоянии преодолеть и я попробовал несколько способов. Я делаю программу, в которой, помимо прочего, пользователь должен вводить данные о продукте, где серийный номер должен быть уникальным и иметь тип char. Что происходит, когда я печатаю серийный номер 1-го продукта, программа возвращает это уже продукт с этим серийным номером, несмотря на то, что он является первым.

Вот код, у меня есть:

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

typedef struct 
{ 
    char numeroserie; 
    char descricao; 
    float preco; 
} 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("Ja 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; 
} 

Кто-то помогите пожалуйста !! я уже получаю разочарование.

Благодаря

ответ

0

Вы получили это неправильно, char не строковый тип в C, это целочисленный тип.

Строка определяется как последовательность байтов, а не nul, за которыми следует байт nul.

Они типа char 1 байт и, следовательно, строка может быть массивом char, как следующий

char string[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; 
/*           ^nul: it's mandatory 
*            for this to be a 
*            string 
*/ 

код вы вывесили выше, кажется, Java первоначально с некоторыми исправлениями, чтобы сделать его компиляции, но если вы включите компиляцию, компилятор действительно разозлит вас.

Вы можете построить строку из массива, как я сделал выше, или с помощью указателя char, в этом случае вам нужно указать массив или динамическую память, выделенную с помощью malloc().

Примером может быть

char *hello; 
hello = malloc(6); 
if (hello == NULL) 
    return ERROR; /* or whatever is need but do not continue */ 
strcpy(hello, "Hello"); 
/* do whatever you want with hello */ 
free(hello); 
+0

Но как я преобразую свой код, чтобы делать правильную вещь !!!! – BRBL

+0

Это требует работы, я могу это сделать, если вы заплатите мне 20 $ paypal. –

+0

Пожалуйста, помогите мне! У меня нет таких денег ..... – BRBL

0

мне удалось поставить я на работу:

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

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

int main() 
{ 
    stProduto produtos[500]; 
    int contadorProdutos=0; 
    inserirProduto(produtos,&contadorProdutos); 
    return 0; 
} 
void inserirProduto(stProduto produtos[], int *contadorProdutos) 
{ 
    char string1[9]; 
    char posicao; 
    do 
    { 
     printf("Introduza o numero de serie do produto:"); 
     scanf("%s",&string1); 
     posicao = procurarNumeroserie(produtos,*contadorProdutos, string1); 
     if (posicao == 0) 
     { 
      printf("Ja 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[9]) 
{ 
    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; 
} 

Ввод numeroserie [8] я уверяю, что пользователь просто вставить 8 символов ??

спасибо