-1

我被分配了以下任务:

编写一个函数(包括文档),给定车辆在停车场的进出时间以及每小时费率,计算应付金额。

假设:

  1. 禁止过夜停车
  2. 部分小时不收费
  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

试试这个::

#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 回答
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);

也不\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 回答