2016-10-26 6 views
-1

おはよう、みんな!私は現在、新たに始められたプログラミング学習者です。ここに、ミニアプリストアのコードがあります。しかし、問題は続いていますが、問題を特定できませんでした。 問題は89.99ドルでアプリを購入しようとしたときに発生し、アプリを購入するのに十分なお金があるので$ 10回償還することを選択しました(私は$ 100のオプションを選択しませんでした。しかし、残りの金額は$ 0.01ではなく$ -79.99になりました。私が言ったように、私が100ドルを入金することを選択した場合、残りの残高は$ 10.01となり、これは正常です。私はどこに間違っていたのか分からない。ここに私のコードです!沈殿物は負の数を与えますか?

このコードで
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <ctype.h> 

int Compare(double deposit, double choiceCost); 
void DisplayApps(char *selectionPtr); 
void SetCost(char selection, double *costPtr); 
void PaymentOptions(double *depositPtr,double cost); 
void DoItAgain(char *quitPtr); 
//void Pay(double *depositPtr, double choiceCost); 
void GetChange(double *depositPtr, double choiceCost); 
void DoItAgain(char *quitPtr); 

int main() 
{ 
    char selectionPtr; 
    char selection; 
    char quitPtr; 
    double costPtr; 
    double deposit = 0.0; 
    double choiceCost; 
    double depositPtr = 0.0; 
    double cost = 0.0; 

    printf("Welcome to the App Store\n"); 
    printf("***************************\n\n"); 
    printf("Your deposit is: %.2f\n", deposit); 
    printf("\n"); 

    while (1) 
    { 
     do { 
      DisplayApps(&selectionPtr); 

      selection = selectionPtr; 
      SetCost(selection, &costPtr); 

      choiceCost = costPtr; 
      Compare(deposit, choiceCost); 

      while (Compare(deposit, choiceCost) == 0) 
      { 
       printf("Your balance isn't enough.\n"); 
       printf("In order to purchase this item, you have to redeem more money.\n"); 
       PaymentOptions(&depositPtr, cost); 
       deposit += depositPtr; 
       printf("You have redeemed $%.2f\n", depositPtr); 
       printf("Your balance now is: $%.2f\n", deposit); 
       printf("\n"); 
      } 
      deposit = depositPtr; 

      GetChange(&depositPtr, choiceCost); 

      DoItAgain(&quitPtr); 
     } while (quitPtr == 'Y' || quitPtr == 'y'); 
     return 1; 
    } 

    return 0; 
} 

void DisplayApps(char *selectionPtr) 
{ 
    printf("-------------------------\n"); 
    printf("HERE ARE THE SLECTIONS\n"); 
    printf("C -- Clown Punching    $299.99\n"); 
    printf("V -- Virtual Snow Globe   $349.99\n"); 
    printf("R -- Remote PC     $999.99\n"); 
    printf("G -- Grocery List Helper  $2.99\n"); 
    printf("M -- Mobile Cam Viewer   $89.99\n"); 
    printf("\n"); 

    printf("Please enter a selection: "); 
    scanf(" %c", &*selectionPtr); 
    printf("\n"); 

} 

void SetCost(char selection, double *costPtr) 
{ 
    if (selection == 'C' || selection == 'c') 
    { 
     *costPtr = 299.99; 
    } 
    else if (selection == 'V' || selection == 'v') 
    { 
     *costPtr = 349.99; 
    } 
    else if (selection == 'R' || selection == 'r') 
    { 
     *costPtr = 999.99; 
    } 
    else if (selection == 'G' || selection == 'g') 
    { 
     *costPtr = 2.99; 
    } 
    else if (selection == 'M' || selection == 'm') 
    { 
     *costPtr = 89.99; 
    } 
} 

int Compare(double deposit, double choiceCost) 
{ 
    if (deposit < choiceCost) 
    { 
     return 0; 
    } 
    else 
    { 
     return 1; 
    } 
} 

void PaymentOptions(double *depositPtr, double cost) 
{ 
    printf("You have (4) options to choose:\n"); 
    printf("1 - $1000.00\n"); 
    printf("2 - $500.00\n"); 
    printf("3 - $100.00\n"); 
    printf("4 - $10.00\n"); 
    printf("How much do you want to redeem?"); 
    printf(">>>>> "); 
    scanf("%lf", &cost); 
    printf("\n"); 
    printf("-------------------------------------\n"); 
    if (cost == 1) 
    { 
     *depositPtr = 1000.00; 
    } 
    else if (cost == 2) 
    { 
     *depositPtr = 500.00; 
    } 
    else if (cost == 3) 
    { 
     *depositPtr = 100.00; 
    } 
    else if (cost == 4) 
    { 
     *depositPtr = 10.00; 
    } 

} 

void GetChange(double *depositPtr, double choiceCost) 
{ 
    *depositPtr = *depositPtr - choiceCost; 
    printf("You have purchased this item successfully.\n"); 
    printf("You still have $%.2f remained in you balance.\n", *depositPtr); 
} 

void DoItAgain(char *quitPtr) 
{ 
    printf("Do you want to continue purchase another item? [Y/N]\n"); 
    scanf(" %c", &*quitPtr); 
} 
+3

を渡すSHOLD [こちら]を参照してください(http://stackoverflow.com/help/ mcve)を使って最小限で完全で検証可能なexample_(* minimal *を強調)を作成する方法を説明します。その長所と短所は、ここでコード全体をダンプするだけではなく、問題を再現して私たちにそれを与える小さなコードに絞ってください。 –

+1

預金= depositPtrを行った後(Compare())、あなたが行ったすべての預金を消去し、最後のものだけ価値がある –

+1

注:**絶対**必要なら**浮動小数点型を使用しないでください**値。ほとんどすべての分数値を表すことはできません。通貨にはスケーリングされた整数を使用します。 – Olaf

答えて

2

GetChange(&depositPtr, choiceCost); あなたはdeposit(総預金)及びません&depositPtr(最後の預金、唯一10)

+0

ありがとうございました!私は問題を見つけ、あなたが示唆したように修正しました:) – user6866732

関連する問題