printf.c 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include <stdio.h>
  2. #include <math.h> // INFINITY, NAN constants
  3. int main(void) {
  4. int sofar = 0;
  5. int len = printf(
  6. "percent: %%\nstring: %s\nchar: %c\nchar: %c\nint: %d\n%nuint: %u\nhex: %x\nHEX: %X\nstring: %s\n",
  7. "String",
  8. 'c',
  9. 254,
  10. -16,
  11. &sofar,
  12. 32,
  13. 0xbeef,
  14. 0xC0FFEE,
  15. "end"
  16. );
  17. printf("%%n returned %d, total len of write: %d\n", sofar, len);
  18. puts("\nPadding madness:");
  19. printf("% -5.3d %+3d\n", 1, 2);
  20. printf("%4c\n", 'c');
  21. printf("%#10.7x\n", 0xFF);
  22. printf("%#4.3o\n", 01);
  23. printf("%#x %#x\n", 0, 1);
  24. printf("%.0d %.0d\n", 0, 1);
  25. printf("(%05d) (%5d)\n", 123, 123);
  26. printf("(%05d) (%5d)\n", -123, -123);
  27. printf("(%13.0d)\n", 0);
  28. printf("%p\n", (void*) 0xABCDEF);
  29. printf("%p\n", (void*) 0);
  30. puts("\nPositional madness:");
  31. printf("%3$d %2$d %1$d\n", 2, 3, 4);
  32. printf("%.*3$d\n", 2, 0, 5);
  33. printf("|%-*6$.*5$s|%-*6$.*5$s|%*6$.*5$s|%*6$.*5$s|\n", "Fizz", "Buzz", "FizzBuzz", "TotalBuzz", 3, 8);
  34. printf("int: %*6$d double: %lf %lf %lf %lf\n", 5, 0.1, 0.2, 0.3, 0.4, 10);
  35. printf("%1$d %1$lf\n", 5, 0.1);
  36. printf("%1$d %lf\n", 5, 0.2);
  37. //printf("int: %*6$d no info on middle types\n", 5, 0.1, 0.2, 0.3, 0.4, 10);
  38. puts("\nFloat madness:");
  39. printf("%20e\n", 123.456789123);
  40. printf("%20E\n", 0.00001);
  41. printf("%20f\n", 123.456789123);
  42. printf("%20F\n", 0.00001);
  43. printf("%20e\n", -123.456789123);
  44. printf("%020e\n", -123.456789123);
  45. printf("%%.5g: %.5g\n", -123.456789123);
  46. printf("%%.5f: %.5f\n", -123.456789123);
  47. printf("%%.5e: %.5e\n", -123.456789123);
  48. printf("%%.*g: %.*g\n", 2, -123.456789123);
  49. printf("%%.*f: %.*f\n", 2, -123.456789123);
  50. printf("%%.*e: %.*e\n", 2, -123.456789123);
  51. printf("%%.*2$g: %.*2$g\n", -123.456789123, 5);
  52. printf("%%.*2$f: %.*2$f\n", -123.456789123, 5);
  53. printf("%%.*2$e: %.*2$e\n", -123.456789123, 5);
  54. printf("%g\n", 100000.0);
  55. printf("%g\n", 1000000.0);
  56. printf("%e\n", 1000000.0);
  57. printf("%G\n", 0.0001);
  58. printf("%G\n", 0.00001);
  59. printf("%E\n", 0.00001);
  60. double nonfinites[] = {INFINITY, -INFINITY, NAN, -NAN};
  61. char *float_formats[] = {"%e", "%E", "%f", "%F", "%g", "%G"};
  62. puts("\nNon-finite float madness:");
  63. for (size_t i = 0; i < sizeof(float_formats)/sizeof(char *); i++) {
  64. printf("%s:", float_formats[i]);
  65. for (size_t j = 0; j < sizeof(nonfinites)/sizeof(double); j++) {
  66. printf(" ");
  67. printf(float_formats[i], nonfinites[j]);
  68. }
  69. printf("\n");
  70. }
  71. puts("Things that have been buggy");
  72. printf("%s%0*lu\n", "+", 2, 5l); // this format string was found in GDB
  73. puts("Testing asprintf...");
  74. char *s = NULL;
  75. int res = asprintf(&s, "test string");
  76. printf("printed: %s, value: %d\n", s, res);
  77. free(s);
  78. res = asprintf(&s, "test string %d", 2);
  79. printf("printed: %s, value: %d\n", s, res);
  80. free(s);
  81. res = asprintf(&s, "test %s %d", "string", 2);
  82. printf("printed: %s, value: %d\n", s, res);
  83. free(s);
  84. }