为啥我的 C++ 程序没有运行?

Posted

技术标签:

【中文标题】为啥我的 C++ 程序没有运行?【英文标题】:Why isn't my C++ program running?为什么我的 C++ 程序没有运行? 【发布时间】:2013-03-07 16:07:37 【问题描述】:
#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 在一行上时,为什么我得到空白输出,数字由空格分隔?

【问题讨论】:

这里的错误太多了。为自己准备一本 C++ 书籍/教程。 打印所有数字的循环在哪里? system("pause") 总是让我很沮丧。 ***.com/q/1107705/10077 @m0skit0:还不如链接The Definitive C++ Book Guide and List。 Jossie,你观察到什么让你相信它没有运行?你期望输出是什么,你观察到什么输出?它会崩溃吗?它是否有任何编译器错误或警告? 【参考方案1】:

你的主要功能应该是这样的:

int main()

    GenerateID();
    system("pause");

【讨论】:

还有return 0;。他也不能在没有循环的情况下打印数字 1-20(以微不足道的方式)。 我解决了。谢谢大家,我没有注意到这个小错误。 @m0skit0:main不需要return语句,很特别。 @m0skit0: 成功返回是隐含的,不需要。 只有main()不需要回车?看起来像是一个糟糕的行为决定......这是在哪个标准中添加的?这个决定背后的逻辑是什么?【参考方案2】:

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

改为这样做:

GenerateID();

(即没有int)。

【讨论】:

【参考方案3】:
int GenerateID();

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

要解决此问题,您应该这样做:

GenerateID();

这将是一个适当的函数调用。


我还想警告您有关系统功能的使用。出于快速简单的测试目的,使用起来完全没问题,虽然有问题,但由于此功能非常依赖于操作系统,我建议不要使用它。

system("pause") 的替代方法是:

std::cin.get();

它不会显示文本,但无论哪种方式你都不需要。 (谢谢大卫)

我希望这会有所帮助!

【讨论】:

或者你可以简单地使用std::cin.get() 你为什么说using namespace std;不属于函数体内,而是属于全局范围?听起来对我来说是一个糟糕的建议。应鼓励限制该声明的范围。【参考方案4】:

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

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

【讨论】:

【参考方案5】:

删除main中对GenerateID()的调用前面的int关键字。

用循环包装这个调用:

for (int i = 0; i < 20; i++) 
    GenerateID();

可选:

system 函数调用替换为this question 提供的解决方案之一,

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

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;

最好让您的 main 函数在退出时返回一个值(与任何返回某些内容的函数非常相似),如上面的代码所示,

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

【讨论】:

以上是关于为啥我的 C++ 程序没有运行?的主要内容,如果未能解决你的问题,请参考以下文章

将 32 位 C++ 代码移植到 64 位 - 值得吗?为啥?

为啥我的 C++ 文件无法运行 [重复]

为啥我的 PyGame 应用程序根本没有运行?

为啥我在探查器中获得的 C++ 运行时间不准确?

为啥我的两个 cin 语句没有在程序结束时运行?

为啥我的代码会崩溃?