这里为原来更正统 风格书面奠定了你的函数:
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;
}
还有一天,我们将讨论的多次加浮动 点数到另一个浮点数的智慧。这不是它应该完成的方式,但对于手头的代码来说是足够的。
欢迎来到Stack Overflow。请尽快阅读[关于]页面。我已经重新设计了一下你的代码 - 但是你有一个非正统的布局风格,你应该修改它以变得更加正统。要在SO上显示代码,请将其格式设置为不带制表符和(推荐)缩进级别4.将其复制到编辑框中;突出显示它,然后按编辑框上方的** {} **(代码)按钮缩进它。 –
要回答你的问题:'if(num_raffle_tickets> amt_raffle_tickets)num_raffle_tickets = amt_raffle_tickets;'。如果请求的号码大于可用号码,这将设置分配给可用号码的抽奖券的数量。 –
有关编码样式,请参见Wikipedia上的[缩进样式](http://en.wikipedia.org/wiki/Indent_style)或[代码样式](http://en.wikipedia.org/wiki/Code_style)。 –