C 使用变量查找剩余金额

C 使用变量查找剩余金额,c,function,numbers,C,Function,Numbers,我接受了有限的数量,并将它们分配到一个数组。。。那样做了 例如。。。我只有100张抽奖券。所以,我只能为多少人买票分配100张票。有些人可能买19,有些人可能买1。但当我到了100票时,我不知道如何停下来检查,只给那个人剩下的票数 下面是一些代码 我的函数调用: int raffle_person, raffle_ticket, person; fscanf(ifp, "%d", &raffle_ticket); fscan

我接受了有限的数量,并将它们分配到一个数组。。。那样做了

例如。。。我只有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;
}
float-Raffle(整数人、整数金额、彩票、整数
奖品数量、奖券浮动价格、国际奖券数量
)
{
int i;浮动利润=0;
if(奖券数量0){
int k;
k=奖券金额+奖券数量;
printf(“奖券%d-%d给了%d人\n”,奖券指数,k+金额-奖券-1,人);
}
printf(“没有为%d\n提供rffle提示”,person);返回0;}否则如果
(奖券数量<奖券金额){
}printf(“奖券%d-%d给了%d人”,奖券索引,
奖券指数+金额奖券-1张,人);

对于(i=0;i,这里是您的函数,最初是以更正统的方式编写的 风格:

amt\u raffle\u tickets
参数是请求的票数;
num\u raffle\u 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;
不幸的是,变量
raffle\u index
没有声明,因此我们可以 假设它是一个全局变量,并且给定它的打印方式必须是
int-raffle\u索引
。类似地,您的
myRaffle
结构也不是 也有记录在案,这再次让我们很难知道发生了什么。 然而,我相信这个结构应该具有
raffle\u index
。从未使用参数
num\u raffle\u 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
$
工作代码

主要变量重命名继续进行。该程序是关于莱佛士的,所以 真的没有必要到处重复抽奖。我没有 完全删除它,但我确实重命名了很多变量

#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;
}
#包括
#包括
枚举{MAX_TICKETS=100};
静态整数抽奖指数=0;
静态结构
{
int奖券[最高奖券];
}我的抽奖;
静态浮动抽奖(整数人、整数票、,
浮动车票(价格、国际有效车票);
内部主(空)
{
文件*ifp=stdin;
国际抽奖人;
国际彩票;
浮动抽奖价格=2.00;
int avail_票证=最大票证;
浮动利润=0.0;
同时(可用票证>0)&&
fscanf(ifp、%d)和抽奖券)=1和
fscanf(ifp、%d、&抽奖人)==1)
{
利润+=抽奖(抽奖人、抽奖券、,
抽奖价格、有效门票);
可用票=可用票-抽奖票;
}
对于(int i=0;i0);
如果(可用票<需要票)
请求车票=可用车票;
printf(“奖券%d-%d给了个人%d\n”,
抽奖指数,抽奖指数+申请票-1人);
对于(i=0;i
改天,我们将讨论反复添加浮动 将一个浮点数转换为另一个浮点数;这不是它的方式
应该这样做,但对于手头的代码来说已经足够了。

欢迎使用堆栈溢出。请尽快阅读该页面。我已经重新格式化了您的代码-但是您有一个非常非正统的布局样式,您应该修改它以使其更为正统。要以这种方式呈现代码,请脱机格式化,不使用选项卡和(推荐)缩进级别为4。复制并粘贴到编辑框中;突出显示它,然后按编辑框上方的
{}
(code)按钮缩进它。回答您的问题:
if(num\u raffle\u tickets>amt\u raffle\u tickets)num\u raffle\u tickets=amt\u raffle\u tickets;
。如果请求的号码大于可用号码,则设置分配给可用号码的奖券数量。有关编码样式,请参阅或访问Wikipedia。我不明白…这是怎么回事?我有两个if stations…我都尝试过,但都不起作用。谢谢,我在维基百科ntro给c哈。但这是一个更大的项目的一部分。太难了!哦,好吧,我的这项作业得c。其他的都得a。我必须努力学习,准备两周后的考试:P
$ ./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
$
#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;
}