OCaml中这三个fscanf调用有什么区别?

时间:2009-11-02 02:28:36

标签: ocaml scanf

我写了一小段代码,只是简单地跳过输入文件中的num_lines行(为了调试目的打印出来的行。这是我尝试过的两件事,但没有用:

for i = 0 to num_lines do
  print_endline (fscanf infile "%s" (fun p -> p));
done;;

for i = 0 to num_lines do
  print_endline (fscanf infile "%S\n" (fun p -> p));
done;;

但是这个确实奏效了:

for i = 0 to num_lines do
  print_endline (fscanf infile "%s\n" (fun p -> p));
done;;

我一直试图理解关于fscanf的文档,但它似乎没有陷入其中。有人可以向我解释为什么最后一个片段有效,但前两个没有?

1 个答案:

答案 0 :(得分:3)

“%s” - 将所有内容与下一个空格匹配(此处为“\ n”)但从不匹配“\ n”

“%S \ n” - 匹配看起来像Ocaml字符串的东西,然后是“\ n”

“%s \ n” - 将所有内容与下一个空格匹配(此处为“\ n”),然后是“\ n”。如果文件中没有尾部的“\ n”或者在“\ n”之前有空格等,这将会有所不同。

“%s” - 匹配任何白色空间,然后是所有尾随空格,包括“\ n”(或者甚至可能没有空格)。这是因为“”表示格式字符串中的“任何空格,可能无”。