初学者C:错误:控制到达非空函数的结束?

我正在尝试制作一个贪婪的算法,我得到了这个错误:

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.25); { amount = amount - 0.25; coins++; } printf("Number of coins to use: %d\n", coins); } 

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

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

 return 0; 

main()结束之前。

你的名字也有一个拼写错误。 它可能是main ,而不是man

为了给你一个更长的答案,你将main定义为返回一个整数( int )但在它的末尾没有return语句,因此它不返回任何内容。

你的花括号没有错。 问题是你将main声明为返回int ..但你没有返回任何东西

如果你使用编译器标志-Wall编译..当你没有从你定义为返回东西的函数返回某些东西时,你的编译器会抱怨。

只需添加:

  return 0; // before the last bracket 

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

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

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

虽然这是在主函数结束时return 0的正确方法,但是你问为什么你的代码没有工作,这不是原因。 即使我不应该一直运行C程序,我很少会return 0 。 此外,请确保您的自定义函数GetFloat与您当前的代码位于同一目录中,否则会出现错误,并确保它也能正常工作。

如果那是你的意图你仍然可以做int man(),但是你仍然需要int main函数,你必须像这样调用你的man函数:

 int main() { man(); return 0; //This isn't crucial, code will still run }