【问题标题】:Parse hexadoku grid解析十六进制网格
【发布时间】:2014-12-24 01:01:55
【问题描述】:

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

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

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

(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 |               |               |               |
+   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +   +
...
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

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

【问题讨论】:

  • 你确定空字符是空格吗?我的意思是:可能其中一些是制表符 '\t' 字符?
  • 是的。我刚刚在十六进制编辑器中检查了输入文件。

标签: c


【解决方案1】:

您显然希望在 scanf 格式字符串中使用空格来要求输入中的空格数。它不起作用; scanf 不这样做。当您的空白要求比这更宽松时,您实际上只能使用 scanf。

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

格式字符串中的空格(例如空格、制表符或换行符)匹配输入中任意数量的空格,包括无空格。

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

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

然后运行另一个循环来验证所有其他字符是否是它们应该是的('|'' '),如果需要这样的验证的话。

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多