Вот задание:
Каждая строка файла содержит следующие данные: пол, имя, рост. Распечатать средний женский рост и имя самого высокого мужчины по данным файла. Использовать структуру для описания понятия человек.
Написал прогу для заполнения файла:
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
class qwe
{
public:
char sex;
char name[15];
float height;
qwe();
};
qwe :: qwe()
{
randomize;
if (random(2)==1) sex='m'; else sex='f';
int k;
for(k=0; k<random(10)+5; k++)
name[k]=char(random(25)+65);
name[k]='\0';
height=(random(500)+1500)/10;
}
qwe info[15];
void main()
{
clrscr();
FILE *f;
char ch='\n';
f=fopen("C:\\123.txt","w");
for (int i=0;i<15;i++)
{
fwrite(&info[i].sex,sizeof(info[i].sex),1,f);
fwrite(&info[i].name,sizeof(info[i].name),1,f);
fwrite(&info[i].height,sizeof(info[i].height),1,f);
fwrite(&ch,sizeof(ch),1,f);
}
fclose(f);
getch();
}
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
class qwe
{
public:
char sex;
char name[15];
float height;
};
void main()
{
clrscr();
qwe human[15];
FILE *f;
f=fopen("C:\\123.txt","w");
fseek(f, SEEK_SET, 0);
for (int i=0;i<15;i++)
{
fread(human[i].sex,sizeof(char),1,f);
fread(human[i].name,sizeof(info[i].name),1,f);
fread(human[i].height,sizeof(float),1,f);
}
fclose(f);
getch();
}
М | Просьба обратить внимание на п.3 правил этого раздела! Lapp |
Прошу прощения - забыл... а теперь не получается добавить описание... Язык - Си++
Unknown, смотри, что происходит: перый параметр fread - указатель на область памяти, КУДА читать данные... Следовательно было бы логично:
for (int i=0;i<15;i++), но это немного не то...
{
fread(&human[i].sex,sizeof(char),1,f);
fread(&human[i].name,sizeof(info[i].name),1,f);
fread(&human[i].height,sizeof(float),1,f);
}
f=fopen("C:\\123.txt","w");ты просто удаляешь из файла все содержимое... Я бы делал вот так:
f=fopen("C:\\123.txt","w");
for (int i=0;i<15;i++)
{
fwrite(&info[i].sex,sizeof(info[i].sex),1,f);
fwrite(info[i].name,15,1,f); // Сохраняешь в любом случае ВСЕ поле, все 15 символов
fwrite(&info[i].height,sizeof(info[i].height),1,f);
fwrite(&ch,sizeof(ch),1,f);
}
fclose(f);
char dummy[2]; // Никому не нужная переменная
f=fopen("C:\\123.txt","r"); // Открывать файл для чтения !!!
fseek(f, SEEK_SET, 0);
for (int i=0;i<15;i++)
{
fread(&human[i].sex,sizeof(char),1,f);
fread(human[i].name,15, 1,f); // Читаешь, соответственно, тоже все 15 символов
fread(&human[i].height,sizeof(float),1,f);
fread(&dummy, sizeof(char), 1, f); // Считываешь перевод строки
}
fclose(f);
С открытием файла для чтения - я стормозил...
По поводу символа перевода строки - забыл...
Спасибо огромное! Вот, что получилось:
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
class qwe
{
public:
char sex;
char name[15];
float height;
qwe();
};
qwe :: qwe()
{
randomize;
if (random(2)==1) sex='m'; else sex='f';
int k;
for(k=0; k<random(10)+5; k++)
name[k]=char(random(25)+65);
name[k]='\0';
height=float(random(500)+1500)/10;
}
qwe info[15];
void main()
{
clrscr();
FILE *f;
char ch='\n';
f=fopen("C:\\123.txt","w");
for (int i=0;i<15;i++)
{
fwrite(&info[i].sex,sizeof(char),1,f);
fwrite(&info[i].name,15,1,f);
fwrite(&info[i].height,sizeof(float),1,f);
fwrite(&ch,sizeof(char),1,f);
}
fclose(f);
getch();
}
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
class qwe
{
public:
char sex;
char name[15];
float height;
};
void main()
{
clrscr();
qwe human;
int n=0;float hm=0,hf=0;char *mname;
FILE *f;
f=fopen("C:\\123.txt","r");
fseek(f, SEEK_SET, 0);
for (int i=0;i<15;i++)
{
fread(&human.sex,sizeof(char),1,f);
fread(&human.name,15, 1,f);
fread(&human.height,sizeof(float),1,f);
if ((human.sex=='m')&(human.height>hm))
{hm=human.height;mname=human.name;}
else {n++;hf+=human.height;}
fread(&human.sex, sizeof(char), 1, f);
}
fclose(f);
cout<<"The highest male is "<<mname<<endl;
cout<<"Common female's height is "<<hf/n<<"sm"<<endl;
getch();
}