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
格式。请回答您的问题,并添加一个小程序,演示如何读取输入并打印第一个输入示例的输出。