为什么我的C ++程序不运行?

时间:2013-03-07 16:07:37

标签: c++

#include <cstdlib>
#include <iostream>

    int GenerateID()
    {
        using namespace std;
        static int nNextID = 0;
        nNextID++;
        if (nNextID <= 20)
        cout << nNextID << endl;
    }

int main()
{
    int GenerateID();
    system("pause");
}

为什么上面的程序没有运行?我想通过这个程序在1-20的控制台号码上生成它。

事实上,该程序正在运行。但是,该程序不会生成任何输出。我希望输出是由空格分隔的一行上的数字120。我观察到空白,即没有输出。

该程序不会崩溃。没有编译器错误或警告。事实上,这是一个程序的演练:

我导入两个库cstdlib,分别使用systemiostream为输入和输出对象cincout执行系统命令。它们位于std命名空间中,因此我输入using namespace std因为我很懒,不想输入std::cout

然后我将nNextID初始化为0,将其递增,如果小于20,则输出nNextID。这是功能的结束。

我从main调用该函数并使用pause结束程序。那么,为什么当我期望一行上的120,用空格分隔的数字时,我会得到空白输出?

5 个答案:

答案 0 :(得分:6)

你的主要功能应该是:

int main()
{
    GenerateID();
    system("pause");
}

答案 1 :(得分:3)

main中,您没有调用该函数。你只是声明了它。

请改为:

GenerateID();

(即没有int)。

答案 2 :(得分:2)

int GenerateID();

不是函数调用。 这是一个函数声明,它定义了函数的返回类型和参数。 这不会调用GenerateID函数,它只允许该定义下的所有内容正确使用该函数(这在这里是非常多余的,因为您已经首先在int main上声明和定义函数。)

要解决此问题,您应该:

GenerateID();

这将是一个正确的函数调用。


我还想警告你使用系统功能。对于快速和简单的测试目的,使用是完全正常的,虽然有问题,但由于此功能非常依赖于操作系统,我建议不使用它。

系统的替代方案(“暂停”)将是:

std::cin.get();

它不会显示文本,但你真的不需要这两种方式。 (谢谢大卫)

我希望这有帮助!

答案 3 :(得分:1)

int GenerateID()中的{p> main声明了一个新函数,它不会调用您之前编写的函数。

为了调用您的函数,只需使用GenerateID();即可。顺便说一下,你的函数没有return任何东西,所以它的返回类型被声明为int没什么意义 - 使用void

答案 4 :(得分:1)

  • int的{​​{1}}来电之前删除GenerateID()关键字。

  • 用循环包裹那个非常呼叫:

    main

任选地:

  • for (int i = 0; i < 20; i++) GenerateID(); 函数调用替换为this question提供的解决方案之一,

  • 将代码分开以显示生成它的id:

    system
  • 优良作法是让你的int GenerateID() { static int id = 0; return id++; } int main(){ using namespace std; for (int i = 0; i < 20; i++) cout << GenerateID() << endl; // here the code for console pausing return 0; } 函数在退出时返回一个值(就像任何函数返回一样),如上面的代码所示,

  • 删除隐式命名空间用法,并使所有用法都是显式的。个人而言,只要隐式使用被隔离到代码的非常特定的部分,我不认为它是一个问题,但如果您的代码变得足够大,您可能需要仔细使用该功能。在此设置中,显然没有必要。