c - 将文本文件读入二维数组

标签 c arrays file-io multidimensional-array

所以目前我有一个工作代码能够读取包含一个 9x9 板的文本文件,二维数组中的每个插槽都是 1-9 之间的数字;但是,有些插槽随机混入了“-”字符。我发现我可以成功读取所有行然后打印它们的唯一方法是使用 char sudoku[9][9] 但这极大地影响了我当前作业的其他部分。

文件应该只有 9 行,如下所示:

123-56-89
4561-3--9

等...

谁能告诉我如何成功地将文本文件内容扫描到 INTEGER 二维数组而不是 char 数组中?

int main(){
 int i, j;
 char sudoku[9][9];
    char filename[100];

        printf("Please enter file name (W/O .txt): ");
        scanf("%s", filename);

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

        for(i=0;i<9;i++){
            for(j=0;j<9;j++){
                fscanf(file1,"%c\t", &sudoku[i][j]);
            }
        }

        for(i=0;i<9;i++){
            for(j=0;j<9;j++){
                printf("%2c", sudoku[i][j]);
                }
            printf("\n");
        }

fclose(file1);
}

最佳答案

int suduku[9][9];

for (int i = 0; i < 9; i++)
{
    for (int j = 0; j < 9; j++)
    {
        char c;
        if (fscanf(file1, " %c", &c) != 1)
            …report read failure and exit…
        else if (isdigit((unsigned char)c))
            sudoku[i][j] = c - '0';
        else
            sudoku[i][j] = 0;
    }
}

将字符读入字符,然后转换为合适的整数。请注意,代码不会关心矩阵中的每个字符是否由十几个空行与下一个字符分隔并且字符前有 20 个空格,或者整个输入是否是单行上的 81 个字符,或任何其他变体.只要文件中至少有 81 个非空白字符就可以。

关于c - 将文本文件读入二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23577785/

相关文章:

c - C 中包含指针的段错误(核心转储)

c++将文件中的行解析为流

C : mark the every struct, union ,数组元素

c - Gnuplot 和 C "x range is invalid"

java - 我可以使用单个数组来填充创建多维数组吗?

java - 线程异常,函数将数字添加到数组

c - ANSI C - 不使用数组替换空白字符

C 程序将一棵二叉搜索树复制到另一棵

c - fopen 与 stat 的性能

c - 如何解析文本输入并将字符串转换为整数?