0

HW 用の POS システムを作成しています。数百の変数を使用する最初のコードを、配列を使用するよりコンパクトなプログラムに変更する必要がありました。これは私の新しいコードです:

    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>

//---------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------
//------------------------------------------Declaring-Variables--------------------------------------------
//---------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------


//Discount Variables
int iPerPurchaseDiscountPercent = 0; //enter a number which will be later changed to a percentage 
int iFinalPurchaseDiscountPercent = 0;//enter a number which will be later changed to a percentage
float fPerPurchaseDiscountPercent = 0;//the percentage value of discount per item
float fFinalPurchaseDiscountPercent = 0;//percentage value of final dicount
float fPerPurchaseDiscountPrice = 0;//price at which discounts will be applied
float fFinalPurchaseDiscountPrice = 0;//price at which the final shop discount will be appled

//Array values for math
float fItemPrice[100] = { 0 }; //Price of Item
int   iItemQuantity[100] = { 0 }; //Quantity of that Item
float fBundleCost[100] = { 0 }; //Price before Discounts (fItemPrice[N] * fItemQuantity[N])
float fDiscountPerItem[100] = { 0 }; //What discount is recieved per item (fItemPrice[N] * iPerPurchaseAmount)
float fItemTotalDiscountRecieved[100] = { 0 }; //Total discount recieved on multiple items of same type (fDicountPerItem * iItemQuantity)
float fDiscountPrice[100] = { 0 };//Price for item after all discounts (fBundleCost - fDiscountRecieved)


//Values for while loop
bool bStillShopping = true;
int iItemCount = 0;
char cExitQuestion = 'y';


//---------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------
//-----------------------------------------------Prototyping-----------------------------------------------
//---------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------


//---------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------
//------------------------------------------------Main-Loop------------------------------------------------
//---------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------
int main(void)
{
printf("Welcome to Blacketts bookstore!\t\t\t\t\t\tPOS V2\n");

//Taking values for the per item discounts
printf("Please enter the price that discounts per item will be applied: ");
flushall();
scanf("%f", &fPerPurchaseDiscountPrice); //takes the value at which items will be discounted
printf("Please enter the percentage to be applied at this price: ");
flushall();
scanf("%d", &iPerPurchaseDiscountPercent); //takes a value eg 10 to be later changed to .1 for 10%
fPerPurchaseDiscountPercent = iPerPurchaseDiscountPercent/100; //changes the int to a float and makes it appropriate for percentage calculations

//Taking values for the final purchase discount
printf("Please enter the price that end of sale discounts will be applied to: "); 
flushall();
scanf("%f", &fFinalPurchaseDiscountPrice); //takes the value at which the whole docket will be discounted by
printf("Please enter the percentage to be applied at this price: ");
flushall();
scanf("%d", &iFinalPurchaseDiscountPercent);//takes a value eg 5 to be later changed to .05 for 5%
fFinalPurchaseDiscountPercent = iFinalPurchaseDiscountPercent/100; //changes the int to a float and make it appropriate for percentage calculations

//While loop to take values and input them into appropriate places
while(bStillShopping == true)
{
    iItemCount = 1; // Counting how many items are being purchased, 0 = 1st item. therefore Total quantity Items must equal iItemCount+1

    printf("\nPlease enter the price of the first item to be purchased: "); //enter price of item
    flushall();
    scanf("%.2f", fItemPrice[iItemCount]);

    printf("Please enter the quantity of that item: "); //enter quantity
    flushall();
    scanf("%d", iItemQuantity[iItemCount]);

    printf("\nWould you like to enter any more Items? (y/n): "); //ask to continue
    flushall();
    scanf("%c", &cExitQuestion);

    if(cExitQuestion == 'n')
    {
        bStillShopping = false; //if dont want to continue exit the loop
    }
    else
    {
        iItemCount++; //if do continue increment item loop and ask for more variables
    }
}


getch();
}    

数量を入力するiItemQuantity[iItemAmout]と、未処理の例外でプログラムがクラッシュします。また、コードの途中でいくつかのデバッグ print ステートメントを実行して、どこに到達し、入力した変数を出力し、返された値が一致しなかったかを確認しました0.00

助けていただければ幸いです。すでに回答済みの質問を別の場所で尋ねていないことを願っています。サイトのナビゲート方法がまだよくわかりません。

現時点でコードが他に何もしないことはわかっていますが、最初の問題が修正されるまで続行する意味がわかりません。

4

2 に答える 2

1

&配列要素にscanfも使用

このような

scanf("%.2f", &fItemPrice[iItemCount]);

scanf("%d", &iItemQuantity[iItemCount]);
于 2013-03-19T10:09:39.103 に答える
0

問題はscanf、実際の値自体ではなく、値へのポインターを期待していることです。ループの前に正しく行いますが、ループ内の入力に対しては行いません。

変更例

scanf("%.2f", fItemPrice[iItemCount]);

scanf("%.2f", &fItemPrice[iItemCount]);

また

scanf("%.2f", fItemPrice + iItemCount);

すべての入力に対して同じことを行います。

于 2013-03-19T10:10:44.310 に答える