2017-02-15 6 views
-1

のためにバランスを設定するやあみんな、私はATMのプログラムを構築しています、と私はOKマイC ATM

すべてを持っている私はそれがプルアップメニューを持っているオプションを選択することができますし、それは私がすることはできません。しかし、関数を実行します私の人生

残高を設定して 変更されるまでそれを得るようにしてください これはポストテストループなので、2つのオプション(デポジット、引き出し)のいずれかで変更されたら保存する必要があります出口が選択されるまで、そして私が残高を更新するために必要となるたびに継続します。

誰かが驚くべきことを助けることができるなら、ここに私のCコードがあります。

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

// Function Declarations 

    int getChoice(); 
    double withdraw (int Choice, int Balance); 
    double deposit (int Choice, int Balance); 
    int VBalance (int Choice, int Balance); 
    double process (int Choice, int Balance); 



int main (void) 
{ 
// Local Declarations 

    int Choice; 
    int Balance; 


// Statements 

do 
{ 
    Balance = 2500.00; 
    Choice = getChoice(); 
    process (Choice, Balance); 
} 
while (Choice != 0); 


return 0; 





} // Main 

/*============================process=*/ 

double process (int Choice, int Balance) 
{ 
// Declarations 


// Statements 
    switch(Choice) 
     { 
      case 1: withdraw (Choice, Balance); 
       break; 
      case 2: deposit (Choice, Balance); 
       break; 
      case 3: VBalance (Choice, Balance); 
       break; 
      case 0: exit; 
       break; 
      deafult: printf("Sorry Option Not Offered"); 

} // switch 

return 0; 
} 


/*============================getChoice=*/ 

int getChoice (void) 
{ 
// Local Declarations 
    char Choice; 

// Statements 

    printf("\n\n**********************************"); 
    printf("\n    MENU    "); 
    printf("\n\t1.Withdrawl Money   "); 
    printf("\n\t2.Deposit Money   "); 
    printf("\n\t3.View Balance   "); 
    printf("\n\t0.Exit     "); 
    printf("\n**********************************"); 
    printf("\nPlease Type Your Choice Using 0-3"); 
    printf("\nThen Hit Enter: "); 
    scanf("%d", &Choice); 

return Choice; 

} //getchoice 


/*============================withdraw=*/ 


double withdraw (int Choice, int Balance) 
{ 
// Local Declarations 
    double amount; 


// Statements 
    printf("Funds:%d", &Balance); 
    printf("\nPlease Enter How Much You Would Like To Withdraw: "); 
    scanf("%f", &amount); 
    Balance = Balance - amount; 

return Balance; 

} //withdraw 


/*============================Deposit=*/ 

double deposit (int Choice, int Balance) 
{ 
// Local Declarations 
    double amount; 

// Statements 
    printf("Funds:%d", &Balance); 
    printf("\nPlease Enter How Much You Would Like To Deposit: "); 
    scanf("%f", &amount); 
    Balance = Balance + amount; 

return Balance; 

} //Deposit 


/*============================VBalance=*/ 

int VBalance (int Choice, int Balance) 
{ 
// Statements 
    printf("\nYour Current Funds:%d", &Balance); 
    printf("\nThank Your For Viewing"); 

return 0; 
} 
+0

なぜC#タグですか? – Pikoh

+1

これは、デバッガの使い方を学ぶのに最適な時間です。デバッガを使用すると、変数とその値を監視しながら、コードを1行ずつ進めることができます。 –

+0

「バランスが取れて、変更されるまでそれを維持する」と、この惑星の誰にでも意味がありますか? –

答えて

0

最初に:コンパイラの警告を有効にします。 gccを使用する場合は、コマンドラインに-Wallを追加します。 IDEを使用する場合、警告をオンにするオプションはコンパイラの設定にする必要があります。

警告でコンパイルすると、printfscanfの使用にいくつか問題があることがわかります。それらを修正してください!

の問題があります。mainは更新されていません。 Cはcall by valueを使用します。これは、関数の引数に加えた変更が呼び出し関数では見えないことを意味します。そのことを回避するために、バランスパラメータをポインタとして宣言し、アドレスをBalanceに渡すことができます。あるいは、あなたのコードのように、新しいBalanceを返すこともできます。あなたが忘れた唯一の事は、Balanceに新しい値をmainに保存することです。 main

変更行:

processを変更
Balance = process(Choice, Balance); 

double process(int Choice, int Balance) 
{ 
    // Declarations 

    // Statements 
    switch (Choice) 
     { 
      case 1: Balance = withdraw(Choice, Balance); // Changed line 
       break; 
      case 2: Balance = deposit(Choice, Balance); // Changed line 
       break; 
      case 3: Balance = VBalance(Choice, Balance); // Changed line 
       break; 
      case 0: exit; 
       break; 
      deafult: printf("Sorry Option Not Offered"); 

    } // switch 

    return Balance; // Changed line 
} 

サード:Balanceint宣言されていますが、時々doubleを使用しています。 1つのタイプを選択してそれに固執する必要があります。 nature of floating point numbersのため、実際にはintegral type is used for moneyが推奨されます。

+0

本当にありがとうございました。本当に助けてくれました。 –

関連する問題