Найти ошибку в функции fprintf. не могу разобраться с форматом double - C (СИ)

Узнай цену своей работы

Формулировка задачи:

есть структура:
Листинг программы
  1. struct Abonent
  2. {
  3. char nomer[11];
  4. double ostatok;
  5. char tarif[15];
  6. }arr [5];
есть функция сейв которая не работает корректно с остатком (дабл) все значения записывает а дабл записывает в файл в виде 0,00000
Листинг программы
  1. int save (struct Abonent *arr)
  2. {
  3. int i=0;
  4. FILE *f=NULL;
  5. f=fopen ("D:\Result.txt", "wt");
  6. if (f==NULL)
  7. {
  8. printf ("No file!!!\n");
  9. exit (0);
  10. }
  11. fprintf (f, "Spisok abonentov\n");
  12. for(i=0;i<5;i++)
  13. {
  14. fprintf(f,"%s\t", &arr[i].nomer);
  15. fprintf(f,"%lf\t", &arr[i].ostatok);
  16. fprintf(f,"%s\t", &arr[i].tarif);
  17. fprintf(f,"\n");
  18. }
  19. fclose (f);
  20. return 0;
  21. }
вот что получаю в файле:
Spisok abonentov 09342598623 0.000000 life 05085458748 0.000000 mtc 09765874598 0.000000 kyivstar 09345874122 0.000000 life 09645874114 0.000000 mtc
вот вся программа (мб там что-то с чем-то связано) :
Листинг программы
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. struct Abonent
  7. {
  8. char nomer[11];
  9. double ostatok;
  10. char tarif[15];
  11. }arr [5];
  12. int load (struct Abonent *arr)
  13. {
  14. int i=0;
  15. FILE *f=NULL;
  16. f=fopen("D:\Input.txt", "rt");
  17. if (f==NULL)
  18. {
  19. printf ("No file!!!\n");
  20. exit (0);
  21. }
  22. for(i=0;i<5;i++)
  23. {
  24. fscanf(f,"%s", &arr[i].nomer);
  25. fscanf(f,"%lf", &arr[i].ostatok);
  26. fscanf(f,"%s", &arr[i].tarif);
  27. }
  28. fclose (f);
  29. return 0;
  30. }
  31. int sortost (struct Abonent *t)
  32. {
  33. struct Abonent x;
  34. int i=0, j=0;
  35. for(i=0;i<5;i++)
  36. {
  37. for(j=0; j<4; j++)
  38. {
  39. if( t[j].ostatok > t[j+1].ostatok )
  40. {
  41. x=t[j];
  42. t[j]=t[j+1];
  43. t[j+1]=x;
  44. }
  45. }
  46. }
  47. return 0;
  48. }
  49. int sorttar (struct Abonent *arr)
  50. {
  51. int i=0, j=0;
  52. struct Abonent temp;
  53. for (i=0; i<5; i++)
  54. {
  55. for (j=0; j<4; j++)
  56. {
  57. if (strcmp(arr[j].tarif, arr [j+1].tarif) >= 0)
  58. {
  59. temp=arr[j];
  60. arr[j]=arr[j+1];
  61. arr[j+1]=temp;
  62. }
  63. }
  64. }
  65. return 0;
  66. }
  67. int save (struct Abonent *arr)
  68. {
  69. int i=0;
  70. FILE *f=NULL;
  71. f=fopen ("D:\Result.txt", "wt");
  72. if (f==NULL)
  73. {
  74. printf ("No file!!!\n");
  75. exit (0);
  76. }
  77. fprintf (f, "Spisok abonentov\n");
  78. for(i=0;i<5;i++)
  79. {
  80. fprintf(f,"%s\t", &arr[i].nomer);
  81. fprintf(f,"%lf\t", &arr[i].ostatok);
  82. fprintf(f,"%s\t", &arr[i].tarif);
  83. fprintf(f,"\n");
  84. }
  85. fclose (f);
  86. return 0;
  87. }
  88. void main (void)
  89. {
  90. int n=0, i=0;
  91. L: printf("1.load\n2.sortorovka po osratky\n3.sortirovka po tarify\n4.save\n5.exit\n");
  92. printf ("Input number : ");
  93. scanf ("%d", &n);
  94. printf ("\n");
  95. switch (n)
  96. {
  97. case 1 : load(arr);
  98. break;
  99. case 2 : sortost (arr);
  100. break;
  101. case 3 : sorttar (arr);
  102. break;
  103. case 4 : save (arr);
  104. break;
  105. case 5 : exit (0);
  106. break;
  107. }
  108. for (i=0;i<5;i++)
  109. printf("%s %2.2lf %s\n",arr[i].nomer,arr[i].ostatok,arr[i].tarif);
  110. printf("\n");
  111. goto L;
  112. }

Решение задачи: «Найти ошибку в функции fprintf. не могу разобраться с форматом double»

textual
Листинг программы
  1. fprintf(f, "%f\t", arr[i].ostatok);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут