我写了一小段代码,只是简单地跳过输入文件中的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的文档,但它似乎没有陷入其中。有人可以向我解释为什么最后一个片段有效,但前两个没有?
答案 0 :(得分:3)
“%s” - 将所有内容与下一个空格匹配(此处为“\ n”)但从不匹配“\ n”
“%S \ n” - 匹配看起来像Ocaml字符串的东西,然后是“\ n”
“%s \ n” - 将所有内容与下一个空格匹配(此处为“\ n”),然后是“\ n”。如果文件中没有尾部的“\ n”或者在“\ n”之前有空格等,这将会有所不同。
“%s” - 匹配任何白色空间,然后是所有尾随空格,包括“\ n”(或者甚至可能没有空格)。这是因为“”表示格式字符串中的“任何空格,可能无”。