C : Clearing/Overwritting specific space in Array

标签 c arrays string sudoku

我有两个字符数组 - 字符网格 [9] [9] - 字符可能值 [9] [9] [10]

网格数组是一个 9x9 数独,其中的空白空间用“0”填充。 possible_values 数组是一个 9x9 数组,其中每个空格都填充了数独“123456789”可能的数字。

现在我想循环遍历网格数组&在已经有一定数量(123456789)的每个空间中我想清除特定空间的possible_value数组空间。

    int j, k;
    char empty_string [] = "";
    char possible_values[9][9][10];
    char grid [9][9];

    for(j=0; j<9; j++){
        for(k=0; k<9; k++){

                printf("%d %d = %c -> pv = %s", j, k, grid[j][k], possible_values[j][k]);

                if (grid[j][k] < 0 ){
                    memcpy(possible_values[j][k], empty_string, 10);

                }

                printf("%d %d = %c -> pv = %s", j, k, grid[j][k], possible_values[j][k]);                   

        }
    }  

我已经用两种外包方法填充了两个数组。

现在,如果我运行程序,possible_values 的值将保持不变,并且不会被空字符串覆盖。

我已经尝试将数组空间设置为 NULL

有人可以帮助我吗?而且我认为覆盖 possible_value 字符串是一种相当奇怪的“清除”字符串的方式,但我没有找到一种方法来完全清除数组的特定空间?

编辑:

这是完整的代码

#include<stdio.h>
#include <stdlib.h>
#include <string.h>

/*****************************************************************************************************/
void sudoku_read(char sudoku[9][9]){
	
	int j, k;
    char filename[100];

    printf("Please enter file name: ");
    scanf("%s", filename);

    FILE *file1 = fopen(filename, "r");

    for(j=0;j<9;j++){
        for(k=0;k<9;k++){
        	fscanf(file1,"%c\t", &sudoku[j][k]);
        }
    }    
	
	fclose(file1);
}
/*****************************************************************************************************/
void set_possible_values(char possible_values[9][9][10]){
	
	int j, k;
    char string [] = "123456789";

    
	for(j=0;j<9;j++){
        for(k=0;k<9;k++)
        {
            memcpy(possible_values[j][k], string, 10);
        }
    } 
}
/*****************************************************************************************************/
void sudoku_solve(char grid[9][9]) {
    	
    	int j, k, i;
    	char empty_string [] = "";
		char possible_values[9][9][10];

		set_possible_values(possible_values);

		for(j=0; j<9; j++){
			for(k=0; k<9; k++){

					printf("%d %d = %c -> pv = %s", j, k, grid[j][k], possible_values[j][k]);
					warten();

					if (grid[j][k] < 0 ){
						memset(possible_values[j][k], 0, 10);
						
					}

					printf("%d %d = %c -> pv = %s", j, k, grid[j][k], possible_values[j][k]);	
					warten ();				

			}
		} 
    
	
		for(j=0; j<9; j++){
			for(k=0; k<9; k++){
				if(grid[j][j] != 0){
				printf("grid[%d][%d] = %c", j, k, grid[j][k]);
				printf("\tThe possible values of cell [%d][%d] are [%s]\n", j, k, possible_values[j][k]);
				}
			}
		} 

}
/*****************************************************************************************************/
int main(void) {
    
	int n;
	int i;
	int j;
	int k;
	
	char board[9][9];
	
	printf("How many Sudokus shoul be solved: ");
	scanf("%d",&n);
   
    for(i=0;i<n;i++) {
		sudoku_read(board);
        sudoku_solve(board);
    }
    return 0;
}

最佳答案

您的空字符串只有 1 个大值(0x00 值,表示字符串的结尾)。您将从该值之后的一堆垃圾复制到您想要清除的位置。更好的选择是使用 memset(possible_values[j][k], 0, 10); .

关于C : Clearing/Overwritting specific space in Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531558/

相关文章:

c - 使用 Libdl.dlopen 杀死 Julia

Makefile 中的 Cflags 没有出现

c++ - c++中的bool数组问题

python - 在字符串中添加一个空格

c - 将结构写入一个文件,在接受 1 个输入后出现段错误

c - 如何将用户输入存储为 c 中的变量?

javascript - 数组元素不会显示在 JavaScript 的选择框中

javascript - 如何按属性值对 JavaScript 中的对象数组进行排序?

javascript - 格式化小写字符串以将每个句子的开头大写

string - 将包含 & 符号的公式插入单元格