diff options
author | David Phillips <david@sighup.nz> | 2019-03-16 19:50:30 +1300 |
---|---|---|
committer | David Phillips <david@sighup.nz> | 2019-03-16 19:50:30 +1300 |
commit | 605e548e42c2ec4882a65b88a09c329a4819cb0a (patch) | |
tree | 961cbc1ce7e170b860074fd0f20886d9e01e9ce6 /load.c | |
parent | 6f81596763820040ad2305cf94b06e4142640940 (diff) | |
download | sudoku-605e548e42c2ec4882a65b88a09c329a4819cb0a.tar.xz |
Add file loading
Diffstat (limited to 'load.c')
-rw-r--r-- | load.c | 55 |
1 files changed, 55 insertions, 0 deletions
@@ -0,0 +1,55 @@ +#include <stdio.h> + +#include "cell.h" + +int load(FILE *f, struct cell (*b)[9][9]) +{ + int x = 0; + int y = 0; + char c = '\0'; + + while (y < 9) { + c = fgetc(f); + + switch(c) { + case ' ': + case '\n': + case '\t': + case '|': + /* skip whitespace, | */ + continue; + + case '_': + case '?': + /* blank = same as 0 */ + c = '0'; + /* fallthrough */ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + (*b)[x][y].val = c - '0'; + break; + + case EOF: + printf("Unexpected EOF when filling (%d,%d)\n", x, y); + return -1; + default: + printf("Unexpected '%c' when filling (%d,%d)\n", c, x, y); + return -1; + } + + /* move to next position in board */ + if (++x == 9) { + x = 0; + y++; + } + } + return 0; +} |