F() takes immutable string literals, that are known at compile time, and places them into flash ("PROGMEM") instead of RAM. snprintf() creates strings at runtime and places them into a mutable array. The two things are fundamentally incompatible.
Limited compile-time concatenation
A very limited form of what you're trying to do ...
For the hardware serial port, the buffer is 64 and I was reading at least 100 times. Every read will clear one byte of data from the serial buffer at a time.
For the software serial port, you do a dummy read and then check whether the buffer is empty or not using
dummy = mySerial.read();
So, in ...