an imperative version is
while true do
let n = read_int () in
if n=42 then exit 0 else print_int n; print_newline ()
done
If 42 weren't guaranteed to be in the input, then it would be
try
while true do
let n = read_int () in
if n=42 then exit 0 else print_int n; print_newline ()
done
with End_of_file -> exit 0