c - 查找字符串是否存在于结构 vector 中

标签 c vector struct comparison

下午好

我带着无法克服的疑问来到这里,并且尝试了多种方法。我正在做一个程序,除其他外,用户必须输入有关产品的数据,其中序列号必须是唯一的并且类型为 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;
}

请有人帮忙!!我已经很沮丧了。

谢谢

最佳答案

你看错了,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);

关于c - 查找字符串是否存在于结构 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213684/

相关文章:

c++ - 如何删除结构 vector 的重复项 C++

c - 读取数据到文本文件并保留N个字符的输出

c - 如果从标准输入读取,刷新标准输出似乎没有效果

c - Windows 中的 Emacs C 模式缩进经常停止工作

python - 应用 Up Vector 查看向量

c - 如何从 NSArray 生成 C vector 或数组?

struct - 选项类型是否小于包装类型加上 boolean 值?

c++ - 结构成员初始化

c - C/gcc 中的枚举类型检查

编译器跳过循环