2015-07-03 59 views
1

下午好,查找字符串是否存在于结构向量中

我在这里怀疑我无法克服,我尝试了很多方法。我正在制作一个程序,用户必须输入有关产品序列号必须唯一且类型为char的数据。正在发生的事情是,当我输入第一个产品序列号时,程序将返回已经是具有此序列号的产品,尽管它是第一个。

这里是我的代码:

#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的最初一些修正,使之编译,但如果你启用编译warnigs,编译器会真的让你感到厌烦。

您可以像上面那样从一个数组中构建一个字符串,或者使用指针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] i的确保用户只需插入8个字符?

感谢

相关问题