Date: Wed, 28 Jan 2009 23:19:07 +0800
From: KHMan
Subject: Possible sscanf %f conversion glitch
To: cygwin@cygwin.com
Hi all,
Someone ran into a problem with sscanf %f conversion on the Lout list. It
appeared that one specific case fails. I am running cygwin-1.5.25-15. Test
cases:
#include <stdio.h>
int main()
{
char *foo1 = "10i";
char *foo2 = "0i";
char *foo3 = "0.0i";
char *foo4 = "1.0i";
char *foo5 = "0.1i";
float f;
printf("%d ", sscanf(foo1, "%f", &f)); printf("%f\n", f);
printf("%d ", sscanf(foo2, "%f", &f)); printf("%f\n", f);
printf("%d ", sscanf(foo3, "%f", &f)); printf("%f\n", f);
printf("%d ", sscanf(foo4, "%f", &f)); printf("%f\n", f);
printf("%d ", sscanf(foo5, "%f", &f)); printf("%f\n", f);
}
As the scanf man page specifies, 'i' is not supposed to be converted, only
the number part is supposed to be recognized.
On Cygwin:
$ ./test
1 10.000000
0 10.000000
1 0.000000
1 1.000000
1 0.100000
On Linux (Ubuntu 8.04) and MinGW, the second case succeeds, the result
being the same as the third case. I've done some googling, and haven't
found anything related to this behaviour.
--
Cheers,
Kein-Hong Man (esq.)
Kuala Lumpur, Malaysia