检查输入的产品名称是否唯一的功能

时间:2013-01-03 12:35:01

标签: c

我正在尝试开发一个函数,使用strcmp()检查输入的Product Name是否已存在于文件中。

这是我的函数,当系统要求用户输入产品名称时,我从void AddProduct()函数调用它。问题是该功能运行不正常,每当用户输入新的产品名称时,它就会说它已经存在。

bool ProductUnique(char ProductName)
{


      product p;
        bool uniqueproduct = true;
        char productname[50];

        pfp=fopen("products.dat","rb");

    while(1)
    {
    fread(&p,sizeof(p),1,pfp);

    if(feof(pfp))
    {
    break;
    }
    if(strcmp(productname,p.ProductName)==0)
    {
        uniqueproduct = false;
    }
    if(!uniqueproduct)
    {
        printf("Product Name aleady exists!");
    }
    }
    return uniqueproduct;
    fclose(pfp);
}

这是我的无效AddProduct()函数

的一部分
void addProduct()
{
    product p1;


    pfp=fopen("products.dat","ab");

    printf("\n========================================================\n\n");
    printf("\t\t Adding a Product\n\n");
    printf("========================================================\n\n");


    char ProductName[100];
    do
    {
        printf("Enter Product Name: \n");
        scanf("%s",ProductUnique(p1.ProductName);
    }while(!ProductUnique(p1.ProductName));

2 个答案:

答案 0 :(得分:0)

您永远不会为productname设置值。此外,您似乎已将输入参数与功能混淆。我认为它应该是ProductUnique(const char* productname),然后你不应该在函数体中有一个产品名称变量。

编辑:这是至少我发现的错误的固定代码。我添加了CHANGED注释以查看我已更改的内容。

bool ProductUnique(const char* productname) // CHANGED: FIX THE ARGUMENT
{


      product p;
        bool uniqueproduct = true;
        // char productname[50];  // CHANGED: NOT NEEDED.

        pfp=fopen("products.dat","rb");

    while(1)
    {
    fread(&p,sizeof(p),1,pfp);

    if(feof(pfp))
    {
    break;
    }
    if(strcmp(productname,p.ProductName)==0)
    {
        uniqueproduct = false;
    }
    if(!uniqueproduct)
    {
        printf("Product Name aleady exists!");
    }
    }
    fclose(pfp); // CHANGED: SHOULD CLOSE BEFORE RETURN
    return uniqueproduct;
//    fclose(pfp);  // CHANGED: DON"T DO ANYTHING AFTER RETURN
}

AddProduct()函数

void addProduct()
{
    product p1;


    pfp=fopen("products.dat","ab");

    printf("\n========================================================\n\n");
    printf("\t\t Adding a Product\n\n");
    printf("========================================================\n\n");


    //     char ProductName[100]; // CHANGED: NOT NEEDED
    do
    {
        printf("Enter Product Name: \n");
        scanf("%s",&p1.ProductName); // CHANGED: READ INPUT, DON'T CALL FUNCTION HERE.
    }while(!ProductUnique(p1.ProductName));

答案 1 :(得分:0)

此部分应在while

之外
 if(!uniqueproduct)
 {
    printf("Product Name aleady exists!");
 }

所以你的代码应该是这样的:

while(1)
{
fread(&p,sizeof(p),1,pfp);

if(feof(pfp))
{
break;
}
if(strcmp(productname,p.ProductName)==0)
{
    uniqueproduct = false;
}
}//from while

if(!uniqueproduct)
{
    printf("Product Name aleady exists!");
}
fclose(pfp);
return uniqueproduct;