繁体   English   中英

全局变量未在C中更新

[英]Global variables not updating in C

一直在从事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);
}

我怀疑你认为

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

手段

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

这并不意味着-这意味着

“将moneytot设置为现在的moneytotf值”

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

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

#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
}

您在问错问题。 您没有任何全局变量; 您所有的人都在主要功能的范围之内。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM