-1

私は次の任務を与えられました。

駐車場への車両の入退場時刻と時給を指定して、料金を計算する関数 (ドキュメントを含む) を作成します。

仮定:

  1. 夜間駐車禁止
  2. 1時間の一部は無料です
  3. 時刻はミリタリー スタイルで表示されます (午後 1 時 20 分は 1320 です)。

関数のテスト ドライバーも作成する必要があります。main() で、必要な数の変数を宣言して初期化し、関数を呼び出して金額を表示します。

これはコードです:

int calcRate (int entry , int exit);

int main (void)
{
    // Local Declarations
    int entry;
    int exit;

    //Statements
    printf("Please Enter Entry and Exit time(In military style. For example : 9.30am as
           0930)\n");
    scanf("%d %d\n",&entry , &exit);

    double fee = calcRate(entry,exit);

    printf("Your Parking Fees are %f\n", fee);

    return 0;
}   //main

/*==============calcRate================
 This function calculates the cost of parking
 */

double calcRate (int entry,int exit,double cost)
{
    int hours;
    double rate = 2.00;
    //Statements
    hours = (exit-entry)/100;
    cost = hours * rate;

    return (cost);
}
//calcRate

ビルドできず、問題に直面しています。たとえば、次のエラーが表示されます。

アーキテクチャ x86_64 の未定義のシンボル: "calcRate(int, int)"、参照元: Parking.o の _main (おそらく、calcRate(int, int, double) を意味していた可能性があります)

私は今、ほぼ2時間立ち往生しています。そこに優しい魂はいますか?

4

3 に答える 3

1

関数宣言と定義の違い

関数宣言

int calcRate (int entry , int exit);

定義ヘッダー

double calcRate (int entry,int exit,double cost)

したがって、宣言または定義ヘッダーを変更します

例: 定義ヘッダーを次のように変更します。

int calcRate(int entry,int exit)

そして宣言を追加

double cost

関数 calcRate 内。

それ以外の

  printf("Please Enter Entry and Exit time(In military style. For example : 9.30am as 0930)\n");
  scanf("%d %d\n",&entry , &exit);

行う

 printf("Please Enter Entry (In military style. For example : 9.30am as 0930)\n");
 scanf("%d",&entry);
 printf("\n Please exit Entry (In military style. For example : 9.30am as 0930)\n");  
 scanf("%d",&exit);        

スキャン内に「\n」はありません。

編集:

夜間駐車の場合

それ以外の

hours = (exit-entry)/100;

使用する

if(exit>entry)
    hours = (exit-entry)/100;
else
    {
        int overnightHours;
        overnightHours = (entry-exit)/100;
        hours=2400-overnightHours;
    }

これにより、負の値が削除されます。

于 2012-11-07T06:11:16.230 に答える
0
int calcRate (int entry , int exit);

int main (void)
{
// Local Declarations
int entry;
int exit;

//Statements
printf("Please Enter Entry time (In military style :  0930)\n");
scanf("%d",&entry);

printf("Please Enter Exit time (In military style :  0930)\n");
scanf("%d"&exit);

また、 no\nは必要ありませんscanf()

double fee = calcRate(entry,exit);

printf("Your Parking Fees are %lf\n", fee); 

%lf手数料がかかるので必要double

return 0;
}  

double calcRate (int entry,int exit)
{
double cost;
double hours;
double rate = 2.00;
//Statements
hours = ((double)(exit-entry))/100;

ここinteger divisionでは、エラーが発生する可能性があることを行いました。したがって、時間を のようにしdoubleます。

cost = hours * rate;

return cost;

}
于 2012-11-07T06:32:20.293 に答える
0

これを試して::

#include <stdio.h>

void calcRate (int entry , int exit, double *cost);

int main (void)
{
    int entry;
    int exit;
    double cost=0 ;

    printf("Please Enter Entry time(In military style. For example : 9.30am as 0930)\n");
    scanf("%d", &entry);
    printf("Please Enter Exit time(In military style. For example : 9.30am as 0930)\n");
    scanf("%d", &exit);

    calcRate(entry,exit,&cost);
    printf("Your Parking Fee is %lf\n", cost);
    return 0;
}   

void calcRate (int entry , int exit, double *cost)
{
    double hours;
    double rate = 2.00;

    hours = (double)(exit-entry)/100 ; //you need to convert your HRS correctly, ex-     entry=0930, exit=1000. cost should be 1.000 but your code will print 1.4000
    *cost = hours * rate;
}
于 2012-11-07T06:19:06.823 に答える