所以我用随机值创建一张彩票,然后对其进行排序。我并不担心排序技术,因为老师没有在这个任务上寻找课程等等,但是,我生成的票证值 - 尽管使用了srand(time(0))然后是rand ()%40 + 1 - 我认为应该使我的随机数在1-40之间......但是mainTicket [0]总是等于0.任何想法?抱歉格式化,让我添加了额外的空格,弄乱了我的缩进。
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void mainLotto (int main[]);
void lottoSort (int ticketArr[]);
int main()
{
int mainTicket[5];
srand (time(0));
mainLotto(mainTicket);
do
{
lottoSort(mainTicket);
} while (mainTicket[0] > mainTicket[1] || mainTicket[1] > mainTicket[2] || mainTicket[2] > mainTicket[3] || mainTicket[3] > mainTicket[4] || mainTicket[4] > mainTicket[5]);
for (int i = 0; i < 5; i++)
{
cout << mainTicket[i] << "\n\n";
}
return 0;
}
///
/// <> Creates the actual lottery ticket
///
void mainLotto (int main[])
{
// Creating the ticket
for (int i = 0; i < 5; i++)
{
main[i] = rand() % 40 + 1;
}
}
///
/// <> Sorts the actual lottery ticket
///
void lottoSort (int ticketArr[])
{
// Sorting the ticket
for (int j = 0; j < 5; j++)
{
if (ticketArr[j] > ticketArr[j+1])
{
int temp;
temp = ticketArr[j+1];
ticketArr[j+1] = ticketArr[j];
ticketArr[j] = temp;
}
}
}
答案 0 :(得分:2)
我刚刚在mainLotto()
之后打印了你声称永远为零的项目,并且它产生了30。
我怀疑问题出在你告诉我们不要看的地方。 :)
在排序功能中,您可以:
for (int j = 0; j < 5; j++) {
if (ticketArr[j] > ticketArr[j + 1]) {
数组的大小为5.您的j
最终将取一个等于4的值。
然后你执行ticketArr[j + 1]
,这实际上是越界访问。
修复是在循环中直到4,而不是5。
正如Galik所说,mainTicket[4] > mainTicket[5]
也是一个超出界限的访问,在阅读了我的答案之后,你应该能够理解为什么。 :)
答案 1 :(得分:2)
我看到你的数组被超出界限的两个问题:
<强>这里:强>
int main()
{
int mainTicket[5];
srand(time(0));
mainLotto(mainTicket);
do
{
lottoSort(mainTicket);
}
while(mainTicket[0] > mainTicket[1] || mainTicket[1] > mainTicket[2]
|| mainTicket[2] > mainTicket[3] || mainTicket[3] > mainTicket[4]);
// || mainTicket[4] > mainTicket[5]); // OUT OF BOUNDS!!!
for(int i = 0; i < 5; i++)
{
cout << mainTicket[i] << "\n\n";
}
return 0;
}
在这里:
void lottoSort(int ticketArr[])
{
// Sorting the ticket
for(int j = 0; j < 4; j++) // j < 4 NOT 5!!! <== WAS OUT OF BOUNDS
{
if(ticketArr[j] > ticketArr[j + 1])
{
int temp;
temp = ticketArr[j + 1];
ticketArr[j + 1] = ticketArr[j];
ticketArr[j] = temp;
}
}
}
可能排序例程从数组边界向外拖动零。