C 如何阅读这种格式

C 如何阅读这种格式,c,formatting,scanf,C,Formatting,Scanf,假设我有这样一个输入,每行一个单元格: [0,0] [0,2] [0,4] [2,4] [4,4] 我使用类似于[%d,%d]的方法一个接一个地读取它们,并获得如下输出: cell1: row: 0, col:0 cell1: row: 0, col:2 然后我有另一个类似这样的输入 [0,0]->[0,1]-> [0,2]->[0,3]-> [0,4]->[1,4]-> [2,4]->[3,4]-> [4,4]->[5,4] 如何读取

假设我有这样一个输入,每行一个单元格:

[0,0]
[0,2]
[0,4]
[2,4]
[4,4]
我使用类似于
[%d,%d]
的方法一个接一个地读取它们,并获得如下输出:

cell1: row: 0, col:0
cell1: row: 0, col:2
然后我有另一个类似这样的输入

[0,0]->[0,1]->
[0,2]->[0,3]->
[0,4]->[1,4]->
[2,4]->[3,4]->
[4,4]->[5,4]
如何读取输入而不被“
->”箭头打断

"[%d,%d]->"

在格式字符串中使用一个空格可以跳过输入中的任意数量的空格(包括换行符…)。

好的,快速而廉价的解决方案:将所有内容扫描到一个开始的括号内,而不管它是什么。然后扫描实际数据。重复一遍

int x, y;

scanf("%*[^[]");            // ignore everything up to the first [

while (scanf(" [%d ,%d]", &x, &y) == 2) {
    printf("[%d, %d]\n", x, y);

    scanf("%*[^[]");        // ignore stuff between ] and [
}

如果我理解正确的话,您有如下输入行

[0,0]
[0,2]
[0,4]
您可以使用
fscanf
这样的调用成功地读取它们

fscanf(ifp, " [%d,%d]", &row, &col);
如果是这样,如果你有另一种输入格式

[0,0]->[0,1]->
[0,2]->[0,3]->
[0,4]->[1,4]->
你为什么不能用这样的东西

fscanf(ifp, " [%d,%d]->[%d,%d]->", &row1, &col1, &row2, &col2);
我想你也可以用

fscanf(ifp, " [%d,%d]->", &row, &col);
这将需要两个调用来读取每一行

p.S.强制性
scanf
提醒:

  • 请记住始终检查
    scanf
    fscanf
    的返回值,以确保预期输入匹配。(我在这个答案的代码片段中显然没有遵循这个建议。)

  • 尽管它似乎经常被使用,
    fscanf
    对于这项工作来说通常是一个糟糕的工具,而且它可能比让它做你真正想做的事情更麻烦。你可以


  • 发布您试图用来解析
    []->…
    格式的代码。我想
    [%d,%d]
    应该是
    scanf
    格式。请回答您的问题,并添加一个小程序,演示如何读取输入并打印第一个输入示例的输出。