【发布时间】:2017-03-05 09:47:08
【问题描述】:
问题已解答,谢谢 问题显然来自没有声明足够大的 vf 也包含 9 --> 它应该是 vf[10]
长话短说,在输入文件中,我有一个 9 x 9 元素的二维数组。它包含来自 {0 , 1 ... 9} 的元素。我需要弄清楚每个数字在每行上出现了多少次(为此我使用了 vf[] 数组),以及与 0 不同的次数(为此我使用了 '号')。我将 vf[] 和 number 包含在 struct 中,如下所示:
struct Line
{
short vf[9];
short number;
}L[10];
读取二维数组后,我使用 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[] 似乎也会对 number 产生影响?
如果我犯了任何英语错误,请放轻松。
【问题讨论】:
-
M是如何声明的?是 M[10][10] 吗? M的内容怎么样 - 范围是0..8吗?
-
如果我也以这种方式读取数组,我认为应该没有问题。我在学校就是这样教的,这成了一种习惯。是的,它被声明为短 M[10][10] 。它只能包含 { 0 ... 9 } 中的元素。
-
没有
vf[9],vf的索引范围是0到8。 -
这可能是未定义的行为,因为仅在循环条件中看到类似
i <= 9的内容就表明您正在阅读某事的结尾。但是你必须发布一个 MCVE,否则它只是猜测。 -
对自己的问题写一个答案并接受它是可以接受的。请考虑这样做。不赞成在问题本身添加“谢谢,已解决”注释。