-1

製品リストでこのバッチ更新を行う必要があります。このバッチ更新では、データベース内からすべての製品を取得し、「注文数量」を取得する必要があります。次に、この「注文数量」を現在の在庫に追加する必要があります。

例:

現在の在庫: 100 注文中: 150

バッチ更新後は、次のようになります: 現在の在庫:250 注文中: 0

私はこの方法を実行しましたが (以下を参照)、実行すると、在庫も注文も更新されません。

void batchUpdate()
{
    printf ("\n\n\n\n\t\t    ********** Batch Update *******\n \n \n");

    int tempOrder;
    int tempStock;
    int tempAdding;


    if ((pfp = fopen("products.dat","r+b")) == NULL)
    {
        printf ("Error! Cannot Open Products.dat!\n");
        printf ("Returning to Main Menu\n");
        system ("PAUSE");
        orderMainMenu();
    }


        while (fread(&p,STRUCTSIZE,1,pfp) == 1)
        {
            tempOrder = p.pOrder;
            tempStock = p.pStock;
            tempAdding = tempOrder + tempStock;
            p.pOrder = 0;
            p.pStock = tempAdding;
            fwrite (&p,STRUCTSIZE,1,pfp);
        }

    fclose (pfp);
    printf ("Orders and Stock Updated!\n");
    printf ("Returning to Main Menu!\n");
    system ("PAUSE");
    orderMainMenu();

}

fseek (pfp, -STRUCTSIZE,SEEK_CUR); を使用してみました。しかし、それは私のプログラムを無限ループに変えました。また、データベース内のすべての製品を表示しようとすると、最初のレコードがスキップされ、最後のレコードのみが表示される無限ループに入りました。システムからproducts.datファイルを削除して、もう一度やり直す必要があります。

なにか提案を?fseek() に何か問題があると思います。

前もって感謝します

4

1 に答える 1

0

エラーが見つかりました。fflush (pfp) を実行しませんでした。fwrite(); の後

これが最終的な作業コードです。

void batchUpdate()
{
    printf ("\n\n\n\n\t\t    ********** Batch Update *******\n \n \n");

    int tempOrder;
    int tempStock;
    int tempAdding;


    if ((pfp = fopen("products.dat","r+b")) == NULL)
    {
        printf ("Error! Cannot Open Products.dat!\n");
        printf ("Returning to Main Menu\n");
        system ("PAUSE");
        orderMainMenu();
    }


        while (fread(&p,STRUCTSIZE,1,pfp) == 1)
        {
            tempOrder = p.pOrder;
            tempStock = p.pStock;
            tempAdding = tempOrder + tempStock;
            p.pOrder = 0;
            p.pStock = tempAdding;
            fseek (pfp,-STRUCTSIZE,SEEK_CUR);
            fwrite (&p,STRUCTSIZE,1,pfp);
            fflush(pfp); //THIS WAS EMITTED AND WAS CAUSING PROBLEMS
        }

fclose (pfp);
printf ("Orders and Stock Updated!\n");
printf ("Returning to Main Menu!\n");
system ("PAUSE");
orderMainMenu();

}

于 2012-12-26T09:58:28.117 に答える