#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
,用空格分隔的数字时,我会得到空白输出?
答案 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;
}
函数在退出时返回一个值(就像任何函数返回一样),如上面的代码所示,
删除隐式命名空间用法,并使所有用法都是显式的。个人而言,只要隐式使用被隔离到代码的非常特定的部分,我不认为它是一个问题,但如果您的代码变得足够大,您可能需要仔细使用该功能。在此设置中,显然没有必要。