Из многолетнего опыта я обнаружил, что scanf вряд ли будет делать именно то, что вы хотите.Это нормально для программы быстрого тестирования.
Одна из возможностей - использовать Str.split
:
let floats_of_string s =
List.map float_of_string (Str.split (Str.regexp "[, \t]+") s)
Возможно, вам придется сделать регулярное выражение немного более жестким, если вы хотите обнаружить неверный ввод.