2017-03-05 22 views
0

回答过的问题的其他成员,谢谢 的问题显然是从没有宣布VF足够大来也含有9 - >应VF [10 ]与结构的一些成员的工作影响到结构C++


长话短说,在输入文件中我有一个9×9元素的2d数组。它包含{0,1 ... 9}中的元素。我需要计算出每个数字出现在每一行上的次数(为此,我使用了vf []数组),以及有多少不同于0(因为我使用了'号码')。我包括VF []成一个结构,如下:

struct Line 
{ 
    short vf[9]; 
    short number; 
}L[10]; 

读取2D阵列后,我使用分析()以确定每个线有多少数字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 

,如果我删除L [我] .vf [M [I] [j]] ++;从线分析(),我得到不同的结果,这就是:

8 7 6 7 6 7 9 6 9 

所以现在的问题是,没有任何人有,为什么增加VF预感[]似乎也对有效果号码

如果我犯了任何英语错误,请转到我身上。

+0

M是如何申报的?是M [10] [10]吗? M的内容如何?范围是0..8? – cup

+0

我不认为这应该是一个问题,如果我也以这种方式读取数组。这就是我在学校教过的东西,这成了一种习惯。是的,它被宣布为短M [10] [10]。它只能包含{0 ... 9}中的元素。 –

+0

没有vf [9]','vf'的索引范围从0到8. –

回答

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“的评论,我意识到在初始化部分的错误。我现在纠正了它。

+0

如果它高于main,是否有必要将它们声明为0?我从未遇到全球未申报变量的问题。 –

+0

'vf [9] = {0};'不会初始化任何东西。它将'0'分配给不存在的数组元素,导致未定义的行为。 – HolyBlackCat

+0

@HolyBlackCat感谢您指出这一点。改变了答案。 –