c - 解析六边形网格

标签 c

我想像下面那样解析 hexadoku 网格,并将字母或空格放入 char hexadoku[16][16];

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|             h | p   m   o     |     i   k     | n       f   l |
+   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +
.....
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

验证第 1 行和第 3 行很容易,就像 scanf 一样(1 - 输入错误,0 - 正确):

(scanf("+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+%c", &n) != 1 || n != '\n')
(scanf("+   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +%c", &n) != 1 || n != '\n');

但是当我尝试阅读第二行时:

scanf("| %c   %c   %c   %c | %c   %c   %c   %c | %c   %c   %c   %c | %c   %c   %c   %c |\n",
        &hexadoku[line][0], &hexadoku[line][1], &hexadoku[line][2], &hexadoku[line][3],
        &hexadoku[line][4], &hexadoku[line][5], &hexadoku[line][6], &hexadoku[line][7],
        &hexadoku[line][8], &hexadoku[line][9], &hexadoku[line][10], &hexadoku[line][11],
        &hexadoku[line][12], &hexadoku[line][13], &hexadoku[line][14], &hexadoku[line][15])

Scanf 失败,写入了 16 个字符中的 4 个。 如果我用空格替换空白字符并将其写回网格:

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| h   |   p   m |               |               |               |
+   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +
...
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

知道我的代码有什么问题以及如何解析 hexadoku 网格吗?

最佳答案

您显然想在 scanf 格式字符串中使用空格以在输入中要求精确的空格数。这是行不通的; scanf 不会那样做。当您的空白要求比这更宽松时,您实际上只能使用 scanf。

关于 scanf ( Linux man page ) 的文档来源是这样描述的。

White space (such as blanks, tabs, or newlines) in the format string match any amount of white space, including none, in the input.

因为您只是从输入中的固定位置提取字符,所以我会使用 fgets 读取整行,然后像这样将它们提取出来:

for(i=0;i<16;++i)
  hexadoku[line][i] = inputline[2+4*i];

然后运行另一个循环来验证所有其他字符是否符合它们的预期('|'' ')(如果需要进行此类验证)。

关于c - 解析六边形网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624120/

相关文章:

c - 使用静态数组

在for循环中创建线程: all threads passed same "i" value

C 错误在只读闪存 NAND MTD0 上打开 O_RDWR

c - 是否有 strncmp() 的惯用用法?

c - 为什么C要在<math.h>中定义M_2_SQRTPI常量?

c - 我的免费工作正常吗?

c - 从 double 参数开始的 80 位扩展精度计算的特性

c - 从 C 文件解析参数的最简单方法是什么?

无法通过引用将结构传递给函数

带有内联函数的 const 参数