home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / lang / c / 12888 < prev    next >
Encoding:
Text File  |  1992-08-27  |  2.2 KB  |  70 lines

  1. Path: sparky!uunet!mcsun!uknet!acorn!eoe!pwestlak
  2. From: pwestlak@eoe.co.uk (Peter Westlake)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: How to fprintf two columns?
  5. Message-ID: <1386@eouk20.eoe.co.uk>
  6. Date: 27 Aug 92 17:47:57 GMT
  7. References: <1684FBD10.KSZ@VM.NRC.CA>
  8. Organization: EO Europe Limited, Cambridge, UK
  9. Lines: 58
  10. X-Newsreader: Tin 1.1 PL3
  11.  
  12. KSZ@VM.NRC.CA writes:
  13. : I need the following output to a file:
  14. :                     1.2     2.3
  15. :                     1.3     2.4
  16. :                     1.4     2.5
  17. :                       ....
  18. : which contains two columns. They are not generated at the same time, i.e.
  19. : at the first the first column is generated and then write to a file. then
  20. : the file is rewinded and the second column is generated. Now I need write
  21. : the second column to that particular place, say begin with 10th column.
  22. : I have tried fseek() but it  seems to me not working. (?)
  23. :  
  24. The way to do this is to think of the file as a stream of bytes:
  25.  
  26.     sp sp 1 . 2 sp sp  2 . 3\n sp sp  1 . 3 sp sp 2 . 4 \n ......
  27.  
  28. Leave a gap after each number in the first column, wide enough for
  29. the second column entry. For instance:
  30.  
  31.     printf("%5.1f  .....\n", first);
  32.  
  33. Then fseek to each gap (bytes 7, 19, 32... in this example layout) and
  34. write the second column:
  35.  
  36.     printf("%5.1f", second);
  37.  
  38. For the numbers of the second column you have to fseek between each one.
  39. For the first you can just write enough extra characters to take you to
  40. the right place, which is what all the dots are doing in the first printf.
  41.  
  42. Here is a complete example, which I have just run (as befits one who
  43. tests software for a living! :-)
  44.  
  45. #include <stdio.h>
  46.  
  47. main()
  48. {
  49.     long i;
  50.     float f;
  51.  
  52.     f = 1.2;
  53.     for (i = 0; i < 3; i++) {
  54.         printf("%5.1f  .....\n", f);
  55.         f += 0.1;
  56.     }
  57.     f = 2.3;
  58.     for (i = 0; i < 3; i++) {
  59.         fseek(stdout, 13*i+7, 0);
  60.         printf("%5.1f\n", f);
  61.         f += 0.1;
  62.     }
  63.     exit(0);
  64. }
  65. ------------------------------------------------------------------------------ 
  66. Peter M Westlake                        EO Computer Ltd.,
  67. Tel: +223-843131                        Abberley House,  Granhams Road,
  68. Fax: +223-843032                        Great Shelford,
  69. email:  pwestlak@eoe.co.uk              Cambridge CB2 5LQ,   England
  70.