我尝试用c ++读取一个数组,填充0到5之间的值。由于一个不重要的原因,我需要计算数字1,数字2,数字3,数字4和数字5的数量站在'iii * DAYS'位置,所以当iii = 0且DAYS为5时,我需要知道有多少数字1,数字2,数字3,数字4和数字5位于第0,第4,第9,第14位。我发布的代码做得很好,但有时会给出一个非常大的非逻辑值,-36589245或99653256,有人可以告诉我为什么会发生这种情况(确实会发生+ - 一次很多次)
DAYS = 28
NURSES = 33
SHIFTS =5
int calculate_penalty_coverage_offspring(int offspring[NURSES*DAYS])
{
int temporary[DAYS];
int count[DAYS][SHIFTS];
penalty_score_offspring_coverage =0;
for (int ii = 0; ii<DAYS; ii++)
{
int een = 0;
int twee = 0;
int drie = 0;
int vier = 0;
int vijf = 0;
for (int iii = 0; iii<NURSES; iii++)
{
temporary[iii] = offspring[(ii+(iii*DAYS))];
}
for(int a = 0 ; a<DAYS ; a++)
{
if(temporary[a]== 1)
{
een++;
count[ii][0] = een;
}
else if(temporary[a] == 2)
{
twee++;
count[ii][1] = twee;
}
else if(temporary[a]== 3)
{
drie++;
count[ii][2] = drie;
}
else if(temporary[a]== 4)
{
vier++;
count[ii][3] = vier;
}
else if(temporary[a] == 5)
{
vijf++;
count[ii][4] = vijf;
}
}
}
for(int ii = 0; ii<DAYS ; ii++)
{
for (int iii =0 ; iii<SHIFTS ; iii++)
{
cout << count[ii][iii] << '\t';
}
cout << '\n';
}
这是我所谈到的例外输出,你可以看到,-31427696的输出中有一个onlogical值......我不明白为什么这个函数运行良好,除了这个时间。
1 2 2 4 4
5 2 2 9 5
9 6 3 5 2
8 3 4 3 8
9 3 3 4 6
5 5 6 8 1
6 8 2 2 5
3 5 8 -31427696 7
5 5 2 5 8
5 7 8 2 3
2 7 1 2 10
5 6 3 5 5
4 4 4 6 7
7 4 6 4 6
6 5 6 4 3
5 3 7 4 6
5 5 6 1 7
5 5 1 6 2
4 6 6 4 5
3 3 4 5 9
6 6 5 4 4
5 5 4 4 5
8 4 4 5 3
5 5 4 7 5
4 8 6 3 3
9 1 5 7 3
3 7 5 2 5
2 6 5 7 5
答案 0 :(得分:5)
首先你说
int temporary[DAYS];
哪里
DAYS = 28
然后你做:
for (int iii = 0; iii<NURSES; iii++)
{
temporary[iii] = offspring[(ii+(iii*DAYS))];
}
其中
NURSES = 33
您正尝试访问temporary
中超出范围的索引。
编辑:在评论中讨论后,
您还没有初始化数组,特别是count
:
int count[DAYS][SHIFTS];
然后有条件稍后填写(部分):
if(temporary[a]== 1)
{
een++;
count[ii][0] = een;
}
// ...
之后访问 指定的索引的count
将导致您看到的垃圾编号。您可能应该将矩阵默认为全部为零,如下所示:
int count[DAYS][SHIFTS] = {0};