【发布时间】:2015-08-31 20:19:52
【问题描述】:
我在 C 中的类型转换有问题。
让我先解释一下我的问题:我有一个二维整数数组,其中填充了 0-9 的数字(它是一个数独,0 表示一个空格)。
然后我有第二个数组,它是一个 3 维字符数组。它包含我的数独空格的所有可能值作为字符串“123456789”。现在,在我填充了两个数组(确实有效)之后,我想在我的 int 数组上循环 2 个 for 循环,并找到所有已经存在 1-9 值的地方。我将该值保存在一个临时变量中。
然后我想遍历 char 数组并从连接到我在 int 数组中找到值的位置的所有行和行中删除临时变量的值(就像真正的数独一样,每个数字只能每行和每行出现一次)。
好吧,要搜索一个 char 数组,我需要一个 char。但是临时变量是一个int,所以我必须对它进行类型转换,这就是问题所在。
for(j=0; j<9; j++){
for(k=0; k<9; k++){
if (grid[j][k] != 0){
help_variable_remove_pv = grid[j][k];
cast_number/*char*/ = (char) help_variable_remove_pv/*int*/;
printf("%c", cast_number);
printf("\n%d", cast_number);
}
}
}
我将 int 转换为 char。但是当它显示在控制台上进行测试时。当我将它打印为字符时,我得到一个“笑脸”,但当我打印为整数时它显示实际数字。但我需要char而不是int中的实际数字。
void sudoku_read(int 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,"%d\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(int grid[9][9])
int j, k, a, b, i;
int help_variable_remove_pv;
char cast_number;
char possible_values[9][9][10];
char zero_string [] = "000000000";
set_possible_values(possible_values);
for(j=0; j<9; j++){
for(k=0; k<9; k++){
if (grid[j][k] > 0){
memcpy(possible_values[j][k], zero_string, 10);
}
}
}
for(j=0; j<9; j++){
for(k=0; k<9; k++){
if (grid[j][k] != 0){
help_variable_remove_pv = grid[j][k];
cast_number/*char*/ = (char) help_variable_remove_pv/*int*/;
printf("%c", cast_number); /*Gives out a smiley*/
printf("\n%d", cast_number); /*Gives out the number*/
}
}
}
int main(int argc, char *argv[])
int n, j, k, i;
int board [9][9];
printf("How many Sudokus should be solved: ");
scanf("%d", &n);
for(i=0; i<n; i++){
sudoku_read(board);
sudoku_solve(board);
}
return 0;
【问题讨论】:
-
所以如果我正确理解了这个问题,实际的问题是“如何将整数转换为字符?”
标签: c arrays string casting int