Найти ошибку в функции fprintf. не могу разобраться с форматом double - C (СИ)
Формулировка задачи:
есть структура:
есть функция сейв которая не работает корректно с остатком (дабл) все значения записывает а дабл записывает в файл в виде 0,00000
вот что получаю в файле:
вот вся программа (мб там что-то с чем-то связано) :
struct Abonent
{
char nomer[11];
double ostatok;
char tarif[15];
}arr [5];int save (struct Abonent *arr)
{
int i=0;
FILE *f=NULL;
f=fopen ("D:\Result.txt", "wt");
if (f==NULL)
{
printf ("No file!!!\n");
exit (0);
}
fprintf (f, "Spisok abonentov\n");
for(i=0;i<5;i++)
{
fprintf(f,"%s\t", &arr[i].nomer);
fprintf(f,"%lf\t", &arr[i].ostatok);
fprintf(f,"%s\t", &arr[i].tarif);
fprintf(f,"\n");
}
fclose (f);
return 0;
}
Spisok abonentov
09342598623 0.000000 life
05085458748 0.000000 mtc
09765874598 0.000000 kyivstar
09345874122 0.000000 life
09645874114 0.000000 mtc
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Abonent
{
char nomer[11];
double ostatok;
char tarif[15];
}arr [5];
int load (struct Abonent *arr)
{
int i=0;
FILE *f=NULL;
f=fopen("D:\Input.txt", "rt");
if (f==NULL)
{
printf ("No file!!!\n");
exit (0);
}
for(i=0;i<5;i++)
{
fscanf(f,"%s", &arr[i].nomer);
fscanf(f,"%lf", &arr[i].ostatok);
fscanf(f,"%s", &arr[i].tarif);
}
fclose (f);
return 0;
}
int sortost (struct Abonent *t)
{
struct Abonent x;
int i=0, j=0;
for(i=0;i<5;i++)
{
for(j=0; j<4; j++)
{
if( t[j].ostatok > t[j+1].ostatok )
{
x=t[j];
t[j]=t[j+1];
t[j+1]=x;
}
}
}
return 0;
}
int sorttar (struct Abonent *arr)
{
int i=0, j=0;
struct Abonent temp;
for (i=0; i<5; i++)
{
for (j=0; j<4; j++)
{
if (strcmp(arr[j].tarif, arr [j+1].tarif) >= 0)
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return 0;
}
int save (struct Abonent *arr)
{
int i=0;
FILE *f=NULL;
f=fopen ("D:\Result.txt", "wt");
if (f==NULL)
{
printf ("No file!!!\n");
exit (0);
}
fprintf (f, "Spisok abonentov\n");
for(i=0;i<5;i++)
{
fprintf(f,"%s\t", &arr[i].nomer);
fprintf(f,"%lf\t", &arr[i].ostatok);
fprintf(f,"%s\t", &arr[i].tarif);
fprintf(f,"\n");
}
fclose (f);
return 0;
}
void main (void)
{
int n=0, i=0;
L: printf("1.load\n2.sortorovka po osratky\n3.sortirovka po tarify\n4.save\n5.exit\n");
printf ("Input number : ");
scanf ("%d", &n);
printf ("\n");
switch (n)
{
case 1 : load(arr);
break;
case 2 : sortost (arr);
break;
case 3 : sorttar (arr);
break;
case 4 : save (arr);
break;
case 5 : exit (0);
break;
}
for (i=0;i<5;i++)
printf("%s %2.2lf %s\n",arr[i].nomer,arr[i].ostatok,arr[i].tarif);
printf("\n");
goto L;
}Решение задачи: «Найти ошибку в функции fprintf. не могу разобраться с форматом double»
textual
Листинг программы
fprintf(f, "%f\t", arr[i].ostatok);