-1

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

这是我的函数,然后当系统要求用户输入产品名称时,我从 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);
}

这是我的 void 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));
4

2 回答 2

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));
于 2013-01-03T12:37:31.717 回答
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;
于 2013-01-03T12:39:46.110 回答