我有一个如下所示的输入文件:
5
(2,3)
(1,4)
(1,3)
(3,4)
(4,5)
第一个数字是有序对的数量。我正在尝试扫描数组x[i]
中的每个x in(x,y),并将y数字扫描到y[i]
。我尝试使用fscanf来获取每一行并将其放入一个数组中,然后设置x[i]=array[1]
并为每个y[i]=array[3]
设置i
,但我认为正在进行的是{{1}每次扫描时都不等于array[0]
。将'(
中的x和y扫描到(x,y)
和x[i]=x
的最简单方法是什么?每个有序对?
答案 0 :(得分:4)
如果对中的数字是整数,则可以使用循环扫描它们:
int i, res, x[number], y[number];
for (i = 0; i < number; i++) {
if (scanf(" (%d ,%d )", &x[i], &y[i]) != 2) {
printf("invalid input\n");
exit(1);
}
}
格式中的初始空格将使用任何空白字符,例如前一个scanf
在输入流中留下的换行符。
根据KemyLand的建议,%d
之后的其他空格将忽略数字与,
和)
字符之间的空格。在数字之前忽略空格已由%d
格式完成。但是你不应该在)
之后添加一个,因为它会指示scanf
消耗对之后的所有空格,包括\n
,这不是问题,但提示输入更多键入了非空格字符,这不是您想要的。
scanf
是一个古老而笨重的函数,它可用于快速和脏的解析,但有许多怪癖和缺点,研究手册并查看许多示例。