为啥我的 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 的控制台上生成。
事实上,程序正在运行。但是,该程序没有生成任何输出。我希望输出是数字1
到20
,在一行上用空格分隔。我观察到空白,即没有输出。
程序不会崩溃。没有编译器错误或警告。事实上,这里有一个程序的演练:
我导入了两个库,cstdlib
用于执行系统命令,system
和 iostream
分别用于输入和输出对象 cin
和 cout
。它们位于std
命名空间中,所以我输入using namespace std
,因为我很懒,不想输入std::cout
。
然后我将nNextID
初始化为0
,将其递增,如果小于20则输出nNextID
。函数到此结束。
我从main
调用该函数并使用pause
结束程序。那么,当我期望 1
到 20
在一行上时,为什么我得到空白输出,数字由空格分隔?
【问题讨论】:
这里的错误太多了。为自己准备一本 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++ 程序没有运行?的主要内容,如果未能解决你的问题,请参考以下文章