0

我正在尝试制作一个贪心算法,但出现此错误:

greedy2.c:27:1: error: control reaches end of non-void function
      [-Werror,-Wreturn-type]
}
^
1 error generated.

使用此代码:

int man(int argc, char* argv[])
{

  float amount;
  do
    {
      printf("Input dollar amount owed:\n");
      amount = GetFloat();
    }
  while (amount <= 0);    
  int coins = 0;
  while (amount >= 0.25);
  {
    amount = amount - 0.25;
    coins++;
  }
  printf("Number of coins to use: %d\n", coins);

}

我的花括号有什么问题,我该如何解决?

4

4 回答 4

4

你的大括号没有错。问题是您将 main 声明为返回 int.. 但您没有返回任何内容

如果您使用编译器标志进行编译-Wall..当您没有从您定义为返回某些内容的函数中返回某些内容时,您的编译器会抱怨..

只需添加:

  return 0; // before the last bracket

还有它的 int main(int argc, char* argv[]){..不是int man(int argc, char* argv[]){

于 2013-10-29T21:51:31.807 回答
3

要简要回答您的问题,请添加:

return 0;

结束前main()

你的名字也有错别字。大概是main,不是man

为了给你一个更长的答案,你定义main为返回一个整数 ( int) 但在它的末尾没有return声明,所以它不返回任何东西。

于 2013-10-29T21:51:33.223 回答
1

main()我假设你在函数中这样做。您的函数名称中有错字。返回类型main()int所以你应该从函数中得到一些东西。在函数return 0; //Success结束时说。main()

于 2013-10-29T21:52:01.653 回答
1

唯一的问题是您的简单错字,它main()不是man().

尽管return 0在 main 函数结束时也是正确的方法,但您问为什么您的代码不起作用,这不是原因。尽管我不应该一直运行 C 程序而且我很少运行return 0。另外,请确保您的自定义函数GetFloat与当前代码位于同一目录中,否则会出现错误,并确保它也可以正常工作。

如果这是您的意图,您仍然可以执行 int man() ,但您仍然需要 int main 函数,并且您必须像这样调用您的 man 函数:

int main()
{
man();
return 0; //This isn't crucial, code will still run
}
于 2013-10-29T21:59:18.480 回答