全局变量未在C

时间:2017-08-29 15:54:49

标签: c variables cs50

正在为edxCS50课程做家庭作业,而且在C和编程方面仍然很新,所以我很自豪能够最终得到这个编译。但最终结果似乎我在某处遗漏了某些东西

代码的要点是取用户输入的钱,然后吐出赚钱所需的最少数量的硬币。我的想法是首先将所有内容转换为整数,以便我可以使用模数。如果输入的金额可以被25整除,那么这就是它的结束,它将除以25以获得所需的季度数量。如果没有那么它会找出有多少个季度,找到余数,用它作为剩余的变化,然后冲洗并重复直到你得到便士。最后它应该加上硬币的数量并吐出来。

问题在于我每次运行它,结束总和导致大胖“0”。我很确定这是因为变量保持在0的起始值但我无法弄清楚为什么它不会随着代码的运行而改变变量值。

第一次在这里发帖,如果我在这篇文章中不够具体或缺少信息,请随时纠正我

#include <stdio.h>
#include <cs50.h>

int main(void)

{float moneytotf=0.0;
int moneytot= moneytotf*100;
int qtr=0;
int dime=0;
int nickel=0;
int penny=0;
int change;
do
{
printf("O hai! How much change is owed?\n");
moneytotf=get_float();
}
while (moneytot<0);

if (moneytot%25==0)
{qtr=moneytot/25;}
else
    {if (moneytot/25<1)
    {qtr=0;}
    else
    {
        qtr=(moneytot-moneytot%25)/25;
        change=moneytot%25;
        if (change%10==0)
        {dime=change/10;}
        else
            {if (change/10<1)
            {dime=0;}
            else
                {dime=((change-change%10)/10);
                change=change%10;
                if (change%5<1)
                {
                    nickel=0;
                }
                else
                    {
                        if ((change-5)<1)
                        {nickel=0;}
                        else
                            {nickel=((change-change%5)/5);
                            change=change%5;
                            if (change==0)
                            {
                                penny=0;
                            }
                            else
                                {penny=change;}
                            }
                    }

                }

    }


    }
}
int sum = qtr+dime+nickel+penny;
printf("%i\n", sum);
}

3 个答案:

答案 0 :(得分:2)

我怀疑你认为

float moneytotf=0.0;
int moneytot= moneytotf*100;

装置

“moneytot应始终包含moneytotf乘以100”

这并不意味着 - 这意味着

“将钱币设置为任何金钱现在的价值”

即0.您永远不会将其设置为任何其他值。你需要在阅读moneytotf后分配它

答案 1 :(得分:0)

全局变量没有问题,但代码中的简单错误

#include <cs50.h>
#include <stdio.h>

int main(void) {
  float moneytotf = 0.0;
  int moneytot = moneytotf * 100; // moneytotf is a float and you are using
                                  // it to assign to an integer. BTW moneytot is
                                  // still 0. Maybe it is better to write:
  // int moneytot = -1;  ??
  int qtr = 0;
  int dime = 0;
  int nickel = 0;
  int penny = 0;
  int change;
  do {
    printf("O hai! How much change is owed?\n");
    moneytotf = get_float(); // You are changing moneytotf and NOT moneytot
  } while (moneytot < 0); // but this condition operates on moneytot that is 0,
                          // so it runs only once

  if (moneytot % 25 == 0) {
    qtr = moneytot / 25; // qtr is always 0
  } else {
    // This code never runs as for now
  }
  int sum = qtr + dime + nickel + penny; // all the others are zero by default
  printf("%i\n", sum); // it will always print 0\n
}

答案 2 :(得分:0)

你问的是错误的问题。你没有任何全局变量;你们所有人都在主要职能范围内。

您最直接的问题是,您接受moneytot的值,并且似乎希望它会自动更改dispatchKeyEvent,但这是您需要在代码中明确执行的操作。