作为 C 和这个网站的新手,我不熟悉我遇到的这个问题。我有一个包含 [8][8] 元素的二维数组。我试图让用户在数组中输入数字直到完成。该程序还远没有完成,但在继续之前我就陷入了这个问题。基本上我使用 for 循环让用户输入每个元素。但是,当第一行完成时,它将最后一个值覆盖到第一列第二行元素点上。我怎样才能防止这种情况发生:这是我的代码:
#include <stdio.h>
#include <string.h>
int Check_rules();
void Print_Array(int array[][8], int size)
{
int i, j;
for (i = 0; i <= size; i++)
{
printf("\n");
for (j = 0; j <= size; j++)
{
printf("%d ",array[i][j]);
}
}
printf("\n\n");
}
int main()
{
int size = 8;
int i, j;
int fullArray[size][size];
int grid1[3][3];
int grid2[3][3];
int grid3[3][3];
int grid4[3][3];
int grid5[3][3];
int grid6[3][3];
int grid7[3][3];
int grid8[3][3];
int grid9[3][3];
for (i = 0; i <= size; i++)
{
for (j = 0; j <= size; j++)
fullArray[i][j] = 0;
}
printf("Want to play a game? Enter values 1-9 starting in row 1 column 1, \nand we will work our way from there. Here's the playing board.\nIt's Sudoku, so follow the rules of the game.\n\n");
for (i = 0; i <= size; i++)
{
printf("\n");
for (j = 0; j <= size; j++)
printf("%d ",fullArray[i][j]);
}
printf("\n\n");
int tmp;
char *keeper = (" ");//space for marker
for (i = 0; i <= size; i++)
{
for (j = 0; j <= size; j++)
{
printf("Enter first value(press 0 and ENTER to skip a box, \nand -1 to cancel game): ");
scanf("%d", &tmp);
if(tmp == -1)
return 0;
fullArray[i][j] = tmp;
Print_Array(fullArray,size);
}
}
return 0;
}
如果您运行此命令,当您在第 1 行中输入最后一个值时,您会看到我的问题。它会覆盖第二行第一列元素点吗?
最佳答案
无论你在哪里<= size
,你实际上想要 < size
。这是因为 C 使用基于 0 的索引。这意味着如果您有一个包含 5 个元素的数组,则索引为 0、1、2、3、4。在像 for (int i = 0; i <= 5; i++)
这样的循环中, i
将得到值 0、1、2、3、4、5。最后一个是数组的无效索引。使用i < 5
修复了问题(确保 i
在达到 5 之前停止)。
修复并清理了代码版本:
#include <stdio.h>
#include <string.h>
void printArray(int size, int array[][size]) {
for (int i = 0; i < size; i++) {
printf("\n");
for (int j = 0; j < size; j++) {
printf("%d ", array[i][j]);
}
}
printf("\n\n");
}
int main() {
int size = 8;
int fullArray[size][size];
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
fullArray[i][j] = 0;
}
}
printf("Enter values in row 1 column 1, and we will work our way from there. Here's the playing board. \n\n");
printArray(size, fullArray);
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("Enter first value (press 0 and ENTER to skip a box, or -1 to cancel game): ");
int number;
scanf("%d", &number);
if(number == -1) {
return 0;
}
fullArray[i][j] = number;
printArray(size, fullArray);
}
}
return 0;
}
编辑
澄清一下,这是问题中原始代码的固定版本。新代码有点不同,但我认为问题是相同的。
关于c - 在c中将值写入二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260168/