2013-01-05 6 views
0

사용자가 주문을 작성하는 AddOrder()라는 메서드가 있습니다. 시스템에서 제품 이름을 입력하라는 메시지를 표시하면 products.dat 파일에서 특정 레코드를 가져 오는 기능을 작성하려고합니다. 또한 사용자가 제품 수량을 입력하라는 메시지가 표시 될 때마다 해당 특정 제품의 제품 수량이 해당 제품의 재고에서 사용할 수있는 양 (products.dat에도 저장되어있는 금액)을 초과하는지 감지 할 수 있기를 원합니다.C에서 파일에서 특정 레코드의 특정 데이터 얻기

나는 함수를 사용했지만 AddOrder()에서 호출 할 때 제대로 작동하지 않습니다. 여기 내 코드가있다. 왜 QuantityInStock 값을 인쇄하는 동안, 그것은 QuantityInStock 변수없는 값의 주소를 인쇄합니다 &을 사용하는 printf("%d", &QuantityInStock);

void addOrder() 
{ 
    order o1; 


    ofp=fopen("orders.dat","ab"); 


    printf("\n========================================================\n\n"); 
    printf("\t\t Adding an Order\n\n"); 
    printf("========================================================\n\n"); 

    do 
    { 
     printf("Enter CustomerID: \n"); 
     scanf("%s",&o1.CustomerID); 
    }while(!findCustomer(o1.CustomerID)); 


    printf("Enter Product Name: \n"); 
    scanf("%s", o1.ProductName); 

    int QuantityInStock = getQuantity(o1.ProductName); 
    printf("%d", &QuantityInStock); 

    int PQuantity = 0; 
    printf("Enter Product Quantities: \n"); 
    scanf("%d", &PQuantity); 

    if(PQuantity > QuantityInStock) 
    { 
     printf("You have axeceeded available stock!\n"); 
    } 
    else 
    { 
     printf("Product Quantity is available\n"); 
    } 

    fwrite(&o1,sizeof(o1),1,ofp); 
    printf("Order record was added to the system!\n"); 
    fclose(ofp); 
} 

int getQuantity(const char* ProductName) 
{ 
    FILE *pfp; 
    product p; 
    int countstock=0; 

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

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

     if(feof(pfp)) 
     { 
     break; 
     } 
     if(strcmp(ProductName,p.ProductName)==0) 
     { 
      countstock +=&p.QuantityInStock; 
     } 

    } 

    fclose(pfp); 
    return countstock; 

} 
+0

무슨 오류가 있습니까? –

답변

0

는 ..

printf("%d", QuantityInStock);

나는이 대답 아니라고 생각 문제의 일부는 문제가되는 곳입니다. 오류가 발생하면 공유하십시오.

+0

고마워, 내 문제가 해결되었습니다. 그것은 실제 값이 아닌 주소를 얻는 것입니다. 나는 그것을 테스트하기 위해 printf를 사용했고, 거대한 가치가 인쇄되었다. – JCooperS

+0

'&'문제를 해결 하시겠습니까? 그런 다음 정답으로 표시 : D –