问题解答,谢谢 问题显然来自于没有声明vf大到足以包含9 - >它应该是vf [10]
长话短说,在输入文件中我有一个9 x 9元素的二维数组。它包含{0,1 ... 9}的元素。我需要确切地计算出每个数字在每一行上显示的次数(为此我使用 vf [] 数组),以及有多少与0不同(为此我使用'数字')。我将 vf [] 和数字包含在结构中,如下所示:
struct Line
{
short vf[9];
short number;
}L[10];
在阅读了2d数组之后,我使用 Analyze()来确定每一行有多少数字与0不同,以及每个数字在该行上出现的次数。
void Analyze()
{
for ( short i = 1 ; i <= 9 ; ++i ) // lines
for ( short j = 1 ; j <= 9 ; ++j ) //columns
if ( M[i][j] ) //different from 0
{
L[i].number++;
L[i].vf[ M[i][j] ]++;
}
}
现在,这里出现了一个我无法解释的问题。这是输入的外观:
2 5 8 7 3 0 9 4 1 // number should be 8
6 0 9 8 2 4 3 0 7 // number should be 7
4 0 7 0 1 5 2 6 0 // number should be 6
3 9 5 2 7 0 4 0 6 // number should be 7
0 6 2 4 0 8 1 0 5 // number should be 6
8 4 0 6 5 0 7 2 9 // number should be 7
1 8 4 3 6 9 5 7 2 // number should be 9
0 7 0 1 4 2 0 9 3 // number should be 6
9 2 3 5 8 7 6 1 4 // number should be 9
但是,我从每行得到的数字是:
9 8 6 8 6 8 10 7 10
现在,如果我从 Analyze()中删除 L [i] .vf [M [i] [j]] ++; 行,我会得到一个不同的输出,即:
8 7 6 7 6 7 9 6 9
所以问题是,是否有人预测为什么增加 vf [] 似乎也会对数字产生影响?
如果我犯了任何英语错误,请轻松告诉我。
答案 0 :(得分:0)
以下是我对此代码所显示/做出的一些错误/更改:
struct Line
{
short vf[9];
^^ here a number 9 can't be counted as index range is 0-8
short number;
Line()
{
std::fill_n(v,9,0); //fills the array with 0
number = 0; // Initialized the number with 0
}
}L[10];
编辑:感谢
@HolyBlackCat
的评论,我在初始化部分意识到了错误。我现在纠正了。