-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

この部分は外側にある必要があります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 に答える
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 に答える