如何阅读这种格式

时间:2019-10-18 11:05:38

标签: 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]

如何在不被箭头'->'打断的情况下读取输入?

3 个答案:

答案 0 :(得分:5)

好的,快速且便宜的解决方案:扫描所有内容,直到一个左括号,而不管它是什么。然后扫描实际数据。重复。

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 [
}

答案 1 :(得分:0)

this.beginnersCourses$ = http$
    .pipe( 
        filter(course => course.category === 'BEGINNER'),
    );

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

答案 2 :(得分:0)

如果我对您的理解正确,则输入行如下

[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提醒:

  1. 请记住始终检查scanffscanf的返回值,以确保期望的输入匹配。 (我显然未能遵循此答案中代码段中的建议。)

  2. 尽管似乎经常使用东西,但fscanf通常对于这项工作来说是一个差劲的工具,它可能会带来更多的麻烦,而不是值得的做你真正想要的。您可以consider using alternatives