fp=fopen("Product.dat","rb+");
while (fread(&prod,sizeof (prod),1,fp)==1) {
prod.stockquant = prod.stockquant + prod.stockorderquant;
prod.stockorderquant = 0;
fseek(fp, -sizeof(prod), SEEK_CUR);
fwrite (&prod, sizeof(prod), 1, fp);
}
fclose (fp);
while ループに入ると、無限ループになります。ファイル ポインタは fp で、prod は PRODUCT と呼ばれる構造体のインスタンスであり、構造体内の変数 stockquant および stockorderquant です。stockquant と stockorderquant の値を変更しようとしています。これは、私のプロジェクトで行っているバッチ更新です。各製品のstockquantとorderquantを編集しながら、product.datというファイル全体を調べようとしています。
無限ループになるのはなぜですか? このメソッドは、prod.id = userinput かどうかをチェックする if ステートメントで使用すると機能するようです。
何か助けはありますか?
追加のコード:
void batchupdate(void) {
system("cls");
FILE *fp;
int c=0;
gotoxy(20,4);
printf("****Batch Update Section****");
char another='y';
while(another=='y')
{
system("cls");
gotoxy(15,6);
printf("Are you sure you want to Batch update (Press Y or N)?");
if((getch()=='y') || (getch() == 'Y')) {
system("cls");
int pos;
fp=fopen("Product.dat","rb+");
while(fread(&prod,sizeof(prod),1,fp)==1) {
prod.stockquant = prod.stockquant + prod.stockorderquant;
product.stockorderquant = 0;
fseek(fp, -(sizeof(prod)), SEEK_CUR);
fwrite (&prod, sizeof(prod), 1, fp);
getchar();
pos = ftell(fp);
printf("%d",&pos);
}
fclose (fp);
gotoxy(15,16);
printf("Complete");
gotoxy(15,18);
printf("All products stock quantity have been updated. The stock order quantity has been reset");
gotoxy(15,16);
printf("Do you want to modify another product?(Y/N)");
fflush(stdin);
another=getch() ; }
else { if((getch()=='n') || (getch() == 'N')) {
mainmenu();
}
}
}
returnfunction();
}
これが私の製品のリスト方法です (そしてうまくいきます!) (ここに表示される注文数量は、stockorderquant とは関係ありません。
void listproduct(void)
{
int x;
FILE *fp;
system("cls");
gotoxy(1,1);
printf("*********************************Product List*****************************");
gotoxy(2,2);
printf("Name ID Price StockQuant Order Quant Description");
x=4;
fp=fopen("Product.dat","rb");
while(fread(&prod,sizeof(prod),1,fp)==1){
gotoxy(2,x);
printf("%s",prod.prodname);
gotoxy(20,x);
printf("%d",prod.prodid);
gotoxy(26,x);
printf("%.2f",prod.price);
gotoxy(34,x);
printf("%d",prod.stockquant);
gotoxy(46,x);
printf("%d",prod.orderquantity);
gotoxy(59,x);
printf("%s",prod.description);
printf("\n\n");
x++;
}
fclose(fp);
gotoxy(35,25);
returnfunction();
}
私の構造体は以下のように定義されています:
struct PRODUCT
{
int id;
char name[30];
char desc[50];
float price;
int stockquant;
int orderquant;
int stockorderquant;
};
struct PRODUCT prod;