假设我有这样的输入,每行一个单元格:
[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 :(得分: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
提醒:
请记住始终检查scanf
和fscanf
的返回值,以确保期望的输入匹配。 (我显然未能遵循此答案中代码段中的建议。)
尽管似乎经常使用东西,但fscanf
通常对于这项工作来说是一个差劲的工具,它可能会带来更多的麻烦,而不是值得的做你真正想要的。您可以consider using alternatives。