Path: utzoo!attcan!lsuc!canrem![blair_wilson@canrem.uucp] From: blair_wilson@canrem.uucp (blair wilson) Newsgroups: comp.lang.c Subject: sprintf badness Message-ID: <199123.995.6229@canrem.uucp> Date: 23 Jan 91 21:02:34 GMT Reply-To: "blair wilson" Organization: Canada Remote Systems Lines: 46 SC>Hi, SC> I am running into problems when I mix floats and integers in sprintf. SC> 1. How it is handled normally ? [Do not use "f" in sprintf ? SC> multiply by 10 and divide by 10 ?] SC>main () SC>{ SC> char buf[90]; SC> int i,j; SC> double k; SC> sprintf(buf,"%.4d%07.2f%.4d",45,445.34,1234); SC> printf("buf = %s\n",buf); SC> sscanf(buf,"%4d%7f%4d",&i,&k,&j); SC> printf("i = %d j = %d k= %7.2f",i,j,k); SC>} SC>------------ output of the above program ---------------- SC>buf = 00450445.341234 111122222223333 1111 field 1 - this looks correct, your specifier %.4d, asks for a field MINIMUM 4 wide (I would think spaces would be used as place holders, but this may be implementation defined) 2222222 field 2 - also correct. A float 7 wide with leading 0's and 2 decimal places (this time you asked for leading 0's with the 0 in the format spec. 3333 field 3 - also correct. A four digit integer occupying 4 spaces You may want to seperate your fields with a space to make them easier to decode, i.e. "\n%.4d %07.2f %.4d" will force a couple of spaces between each field. SC>i = 45 j = 1234 k= 8840025108807417000.00 field k messes up in this case because you need to specify %lf for doubles, so its stuffing a float, rather than a double, at the address you specify. Hope this helps email - blair.wilson@canremote.uucp --- ~ DeLuxe}ab #280sa ~ I tried the rest but bought the best!!!! -- Canada Remote Systems. Toronto, Ontario NorthAmeriNet Host