OCaml中这三个fscanf调用之间的区别是什么?

OCaml中这三个fscanf调用之间的区别是什么?,ocaml,scanf,Ocaml,Scanf,我编写了一小段代码,只需跳过输入文件中的num_行行(出于调试目的打印出行)。以下是我尝试过的两件不起作用的事情: 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

我编写了一小段代码,只需跳过输入文件中的
num_行
行(出于调试目的打印出行)。以下是我尝试过的两件不起作用的事情:

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上的文档,但它似乎没有被理解。有人能给我解释一下为什么最后一个代码段有效,但前两个无效吗?

%s”--将所有内容匹配到下一个空格(“\n”在这里),但从不匹配“\n”

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

“%s\n”--将所有内容匹配到下一个空白(“此处为“\n”),然后再匹配“\n”。如果文件中没有尾随“\n”,或者“\n”前面有空格,则此操作会有所不同

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