2013-11-27 40 views
0

我正在采取有限的数量,并将它们分配给一个数组......将其完成。找到变量的剩余金额

例如...我只有100张抽奖券。所以,我只能分配100张门票,让很多人买票。有些人可能会购买19,有些可能会购买1.但是,当我达到100时,我不知道如何停止和检查,只剩下剩余票数。

这是一些代码。

我的函数调用:

int raffle_person, raffle_ticket, person; 
       fscanf(ifp, "%d", &raffle_ticket); 
       fscanf(ifp, "%d", &raffle_person); 


      profit+= Raffle(raffle_person,raffle_ticket, number_raffle_items,raffle_price, num_raffle_ticket); 
      num_raffle_ticket = num_raffle_ticket - raffle_ticket; 

      } 

基本上它会扫描该文件中的信息,然后调用函数(忽略利润),然后取票的数量,并从人买的量减去其。

下面是函数:

float Raffle (int person, int amt_raffle_tickets, int 
num_raffle_prize,float price_of_raffle_ticket, int num_raffle_ticket 
) 
{ 
    int i; float profit = 0; 

    if (num_raffle_ticket <= amt_raffle_tickets){ 

     if (num_raffle_ticket - amt_raffle_tickets >0){ 
      int k; 
      k = amt_raffle_tickets + num_raffle_ticket; 

      printf("RAFFLE TICKETS %d - %d given to PERSON %d\n", raffle_index, k + amt_raffle_tickets -1 , person); 
     } 

     printf("NO rffle tikes given to %d\n" , person); return 0; } else if 
      (num_raffle_ticket < amt_raffle_tickets){ 

      } printf("RAFFLE TICKETS %d - %d given to PERSON %d\n", raffle_index, 
        raffle_index + amt_raffle_tickets -1 , person); 

     for (i=0; i<amt_raffle_tickets; i++){ 
      myRaffle.raffle_ticket[raffle_index] = person; profit+= price_of_raffle_ticket; 
      raffle_index++; 

     } 

     return profit; 
} 

第一个if语句检查是否该人购买量已经大于...然后停止功能...(作品)

但我遇到了问题,因为我不知道如何将剩余的票数分配给一个人。就像我已经分配了96张门票一样,我如何从100中找到差异,并且只将这四个分配给这个人?

+0

欢迎来到Stack Overflow。请尽快阅读[关于]页面。我已经重新设计了一下你的代码 - 但是你有一个非正统的布局风格,你应该修改它以变得更加正统。要在SO上显示代码,请将其格式设置为不带制表符和(推荐)缩进级别4.将其复制到编辑框中;突出显示它,然后按编辑框上方的** {} **(代码)按钮缩进它。 –

+0

要回答你的问题:'if(num_raffle_tickets> amt_raffle_tickets)num_raffle_tickets = amt_raffle_tickets;'。如果请求的号码大于可用号码,这将设置分配给可用号码的抽奖券的数量。 –

+0

有关编码样式,请参见Wikipedia上的[缩进样式](http://en.wikipedia.org/wiki/Indent_style)或[代码样式](http://en.wikipedia.org/wiki/Code_style)。 –

回答

0

这里为原来更正统 风格书面奠定了你的函数:

float Raffle(int person, int amt_raffle_tickets, int num_raffle_prize, 
      float price_of_raffle_ticket, int num_raffle_ticket) 

amt_raffle_tickets说法是门票的请求数量; 参数num_raffle_ticket是可用的票数。

{ 
    int i; 
    float profit = 0; 

    if (num_raffle_ticket <= amt_raffle_tickets) 
    { 
     if (num_raffle_ticket - amt_raffle_tickets > 0) 
     { 
      int k; 
      k = amt_raffle_tickets + num_raffle_ticket; 
      printf("RAFFLE TICKETS %d - %d given to PERSON %d\n", 
        raffle_index, k + amt_raffle_tickets - 1, person); 
     } 
     printf("NO raffle tickets given to %d\n", person); 
     return 0; 

printf()return看起来是错误的,或许意味着 在else if子句中声明的空块去。 但是,else if块将永远不会被输入,因为条件 已被上述if条件覆盖,这留下了什么 printf()return应该做的问题。

} 
    else if (num_raffle_ticket < amt_raffle_tickets) 
    { 
    } 
    printf("RAFFLE TICKETS %d - %d given to PERSON %d\n", raffle_index, 
      raffle_index + amt_raffle_tickets -1, person); 

    for (i = 0; i < amt_raffle_tickets; i++) 
    { 
     myRaffle.raffle_ticket[raffle_index] = person; 
     profit+= price_of_raffle_ticket; 
     raffle_index++; 
    } 

    return profit; 
} 

不幸的是,该变量raffle_index没有声明,所以我们可以 假定它是一个全局变量,并赋予它印必须 的int raffle_index的方式。同样,您的myRaffle结构不是 记录,这再次使它很难知道发生了什么。 但是,我相信该结构应该保持值为 raffle_index。从未使用论据num_raffle_prize

我已经绕过未指定的位,并拿出工作代码。 它从标准输入中读取,而不是从文件中读取,因为我很懒。

实施例的固定码运行:

$ ./raffle 
13 3 
RAFFLE TICKETS 0 - 12 given to PERSON 3 
15 2 
RAFFLE TICKETS 13 - 27 given to PERSON 2 
17 231 
RAFFLE TICKETS 28 - 44 given to PERSON 231 
Ticket 0 for person 3 
Ticket 1 for person 3 
Ticket 2 for person 3 
Ticket 3 for person 3 
Ticket 4 for person 3 
Ticket 5 for person 3 
Ticket 6 for person 3 
Ticket 7 for person 3 
Ticket 8 for person 3 
Ticket 9 for person 3 
Ticket 10 for person 3 
Ticket 11 for person 3 
Ticket 12 for person 3 
Ticket 13 for person 2 
Ticket 14 for person 2 
Ticket 15 for person 2 
Ticket 16 for person 2 
Ticket 17 for person 2 
Ticket 18 for person 2 
Ticket 19 for person 2 
Ticket 20 for person 2 
Ticket 21 for person 2 
Ticket 22 for person 2 
Ticket 23 for person 2 
Ticket 24 for person 2 
Ticket 25 for person 2 
Ticket 26 for person 2 
Ticket 27 for person 2 
Ticket 28 for person 231 
Ticket 29 for person 231 
Ticket 30 for person 231 
Ticket 31 for person 231 
Ticket 32 for person 231 
Ticket 33 for person 231 
Ticket 34 for person 231 
Ticket 35 for person 231 
Ticket 36 for person 231 
Ticket 37 for person 231 
Ticket 38 for person 231 
Ticket 39 for person 231 
Ticket 40 for person 231 
Ticket 41 for person 231 
Ticket 42 for person 231 
Ticket 43 for person 231 
Ticket 44 for person 231 
Profit = 90.00 
$ 

工作码

主要变量更名继续。该方案是关于抽奖,所以 真的没有必要重复raffle无处不在。我没有完全删除它,但我确实重命名了很多变量。

#include <assert.h> 
#include <stdio.h> 

enum { MAX_TICKETS = 100 }; 
static int raffle_index = 0; 
static struct 
{ 
    int raffle_ticket[MAX_TICKETS]; 
} myRaffle; 
static float Raffle(int person, int req_tickets, 
        float ticket_price, int avail_tickets); 

int main(void) 
{ 
    FILE *ifp = stdin; 
    int raffle_person; 
    int raffle_ticket; 
    float raffle_price = 2.00; 
    int avail_tickets = MAX_TICKETS; 
    float profit = 0.0; 

    while (avail_tickets > 0 && 
      fscanf(ifp, "%d", &raffle_ticket) == 1 && 
      fscanf(ifp, "%d", &raffle_person) == 1) 
    { 
     profit += Raffle(raffle_person, raffle_ticket, 
          raffle_price, avail_tickets); 
     avail_tickets = avail_tickets - raffle_ticket; 
    } 

    for (int i = 0; i < raffle_index; i++) 
     printf("Ticket %d for person %d\n", i, myRaffle.raffle_ticket[i]); 

    printf("Profit = %.2f\n", profit); 
    return 0; 
} 

float Raffle(int person, int req_tickets, 
      float ticket_price, int avail_tickets) 
{ 
    int i; 
    float profit = 0; 

    assert(avail_tickets > 0); 
    if (avail_tickets < req_tickets) 
     req_tickets = avail_tickets; 
    printf("RAFFLE TICKETS %d - %d given to PERSON %d\n", 
      raffle_index, raffle_index + req_tickets - 1, person); 

    for (i = 0; i < req_tickets; i++) 
    { 
     myRaffle.raffle_ticket[raffle_index++] = person; 
     profit+= ticket_price; 
    } 

    return profit; 
} 

还有一天,我们将讨论的多次加浮动 点数到另一个浮点数的智慧。这不是它应该完成的方式,但对于手头的代码来说是足够的。

+0

谢谢,我在介绍c哈哈。但它是一个更大的计划的一部分。它太难了!哦,不好,必须在这个任务上拿一个C。我在所有其他人中得到了A。生病在两周内必须努力学习测试:P – user3026473