我不得不说我是编程初学者,而且我正试图制作一个乐透计划。一个生成7个随机数的程序。我使用堆栈存储数字。
这是我的代码:
Info: Nothing to build for loto3
当我建造它时说它没关系。但是当我尝试运行它时,它打印unnest
,只是一秒钟然后消失,然后控制台保持空白,但程序仍在运行,因为我可以终止它。
我正在使用gcc,当我尝试编译一个基本的hello world程序时,它运行没有问题。
答案 0 :(得分:0)
答案是:由于代码没有过时,因此无法构建任何内容。您刚刚看到来自构建系统的消息,我假设它是一个IDE(Eclipse?MS工具?哪一个?)
线索是您的程序正在执行,因为您可以终止它。你实际上有一些错误 - v
数组的大小应该是8而不是7.另一个错误是main的最后一行:cin >> v[1]
。如果您没有无限循环,程序可能会等待您输入内容(但您不知道,因为该程序没有告诉您它正在等待输入。)
此外,从具有void
以外的返回类型的函数返回值是正确的形式。 main()
返回一个整数值,因此您还想添加return 0
作为最后一个语句。当然,您可以返回任何您喜欢的整数值,但约定认为返回零表示执行成功(没有错误。)
有些纠正的代码:
#include <iostream>
#include <stack>
#include <stdlib.h>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
int v[8];
int i = 0;
stack<int> myStack;
cout << "Seeding random values..." << endl;
while (v[i]< v[7])
{
v[i] = 1+(rand()% 38);
i++;
myStack.push(v[i]);
}
int j = 1;
while(!myStack.empty())
{
cout << j << " broj je: " << myStack.top() << endl;
myStack.pop();
j++;
}
cout << "Enter a value for v[1]: ";
cin >> v[1];
return 0;
}
如果在第一个while
循环中有一个无限循环,你将永远不会看到&#34;输入v [1]&#34;的值。提示。否则,您将收到输入值的提示,并且您的程序应该正确终止。
答案 1 :(得分:0)
一些简化。
#include <iostream>
#include <stack>
#include <ctime>
using namespace std;
inline void keep_window_open()
{
cin.clear();
cout << "Please enter a character to exit\n";
char ch;
cin >> ch;
return;
}
int main()
{
srand(time(NULL));
constexpr int number_count {7};
stack<int> myStack;
// use a for loop as you know the number of repetitions
for(int i {0}; i<number_count; ++i)
{
myStack.push(1+(rand()% 38)); // no need for an inbetween variable
}
int j {1};
while(!myStack.empty())
{
/* Next line: j++ uses the post increment notation.
It increments after each cout. */
cout << j++ << " broj je: " << myStack.top() << endl;
myStack.pop();
}
keep_window_open();
return 0;
}
无论如何,我不会使用堆栈,因为排序很麻烦,你可能想订购输出。此外,您应该添加一种机制来检查双打。