C++ 无需构建c++;

C++ 无需构建c++;,c++,C++,我不得不说我是编程新手,我正在尝试制作一个loto程序。生成7个随机数的程序。我用堆栈来存储数字 这是我的密码: #include <iostream> #include <stack> #include <stdlib.h> #include <ctime> using namespace std; int main() { srand(time(NULL)); int v[7]; int i = 0; st

我不得不说我是编程新手,我正在尝试制作一个loto程序。生成7个随机数的程序。我用堆栈来存储数字

这是我的密码:

 #include <iostream>
 #include <stack>
 #include <stdlib.h>
 #include <ctime>
 using namespace std;

 int main()
{
   srand(time(NULL));
   int v[7];
   int i = 0;
   stack<int> myStack;

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++;
}
cin >> v[1];
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
srand(时间(空));
INTV[7];
int i=0;
堆叠myStack;
而(v[i]答案是:没有任何东西可以构建,因为代码没有过时。您只是看到构建系统的一条消息,我假设它是一个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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
srand(时间(空));
int v[8];
int i=0;
堆叠myStack;
不能进行一些简化

#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;
}
#包括
#包括
#包括
使用名称空间std;
内联无效保持窗口打开()
{
cin.clear();
cout>ch;
返回;
}
int main()
{
srand(时间(空));
constexpr int number_count{7};
堆叠myStack;
//使用for循环,因为您知道重复次数

对于(int i{0};i可能您应该显示您的Makefile,以便我们可以调试构建问题。我再说一遍,我是一个完全的初学者,如果您能为我简化,我将非常感谢您的代码在coliru中构建得很好,但是当(v[i]处指示数组超出了访问范围)
。您的数组大小为7,您正在访问8.element。虽然您的代码没有在ideone上输出任何内容,因为您之前没有初始化v,但while(v[i]cout
是一个相当强大的调试工具——你可以吗请毫不犹豫地输出消息,这样您就可以知道您的程序当前正在执行的位置。(并单击“接受答案”图标)为什么容易当您可以很难做到时,我更正了它并使用了“我只是想让它保持打开状态。还有什么别的方法可以让它保持打开状态吗?我将两个while循环都更正为for循环。@FilipTrajkoski您可以使用
cin.get();
std::getchar()
系统(“暂停”)
保持控制台打开。根据您的操作系统,有不同的可能性。与检查双精度相比,当然可以,但同样,没有为其创建堆栈。@FilipTrajkoski I添加了一个函数以保持控制台打开。这是来自的方法。