1

我写了一小段代码来简单地跳过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 上的文档,但似乎并没有深入了解。有人可以向我解释为什么最后一个片段有效,但前两个片段没有?

4

1 回答 1

3

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

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

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

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

于 2009-11-02T02:55:26.817 回答