【发布时间】:2015-06-10 22:18:49
【问题描述】:
我试过这个,但我的编译器(Visual Studio 2013)总是把事情搞砸。 我有一个从 1 开始索引的 9 x 9 矩阵。它在开始时为 0。从元素 1:1 开始,我开始递增矩阵中的值或递增 x,y,基本上移动到下一个矩阵元素。
但是,程序忽略了我的增量以及 x,y 最初设置为 1 的事实。 它也忽略了函数调用。 代码注释如下。
我确定这是我正在编译的源代码! 重新启动笔记本电脑和 Visual Studio,但仍然无法正常工作。 打开新项目,同样的事情。 提前致谢。
#include<stdio.h>
#include<stdlib.h>
unsigned int Matrix[10][10], x, y;
// Ignore this..
int checkLine()
{
unsigned int i, j, k;
for (k = 1; k <= 9; k++){
if (Matrix[k][1] == 0) break;
for (i = 1; i <= 9; i++)
for (j = 1; j <= 9; j++)
if (Matrix[k][i] == Matrix[k][j] && i!=j)
return 0;
}
return 1;
}
//Ignore this..
int checkColumn()
{
unsigned int i, j, k;
for (k = 1; k <= 9; k++){
if (Matrix[1][k] == 0) break;
for (i = 1; i <= 9; i++)
for (j = 1; j <= 9; j++)
if (Matrix[i][k] == Matrix[j][k] && i!=j)
return 0;
}
return 1;
}
//Ignore this..
int checkSquare()
{
unsigned int i, j, k,l,m,n;
for (m = 1; m <= 7; m = m + 3)
for (n = 1; n <= 7; n = n + 3)
for (k = m; k <= m + 2; k++)
for (l = n; l <= n + 2; l++)
for (i = m; i <= m + 2; i++)
for (j = n; j <= n + 2; j++)
if (Matrix[k][l] == Matrix[i][j] && !(k==i && l==j))
return 0;
return 1;
}
void increment()
{
if (y == 9)
{
x++;
y = 1;
}
else y++;
}
void decrement()
{
if (y == 1)
{
x--;
y = 9;
}
else
y--;
}
void print_Matrix(){
unsigned int i, j;
for (i = 1; i <= 9; i++){
for (j = 1; j <= 9; j++)
printf("%u ", Matrix[i][j]);
printf("\n");
}
}
//
// MAIN. PROBLEM BELOW
//**
void main()
{
unsigned int i, j;
for (i = 1; i <= 9;i++)
for (j = 1; j <= 9; j++)
Matrix[i][j] = 0;
print_Matrix(); // Function call is ignored here. Don't know why.***
x = 1;
y = 1;
// X and Y are OBVIOUSLY 1***
while (x < 10) //Condition OBVIOUSLY true***
{
printf("%u, %u", x, y); //Keeps printing 0,3 and eventually 0,2***
printf("\n");
Matrix[x][y]++; //Incrementation...***
print_Matrix(); // Always prints a blank Matrix consisting of only 0's***
if (checkLine() && checkColumn() && checkSquare())
{
increment();
}
if (Matrix[x][y] == 10){
Matrix[x][y] = 0;
decrement();
}
}
print_Matrix();
}
【问题讨论】:
-
您的示例甚至无法按原样编译。它应该是
int main()。 -
你怎么知道第一个函数调用被“忽略”了?从给出的代码来看,这似乎是不可能的。
-
打印从 0,3 开始,而不是空白矩阵
-
因此在调用“decrement()”并将其转回零之前,您将位置 [1][1] 增加十次。减量调用应该使 Y = 9 和 X = 0,所以现在您正在编写您极力避免的 0 索引,但检查函数从不考虑这些索引。所以我猜你的程序会永远卡在那里?不要责怪编译器..
标签: c++ c visual-studio compilation increment