PDA

Просмотр полной версии : Работа с файлами


unfii
30.05.2009, 20:10
Создать файл, содержащий сведения о результатах охоты.
Данные должны быть представлены в виде следующей структуры:
-фамилия охотника;
-количество убитых животных;
-общая масса всех животных.
Написать программу, которая находит самого результативного охотника-за количеством животных и по весу животных.
Каждую из функций разместить в отдельном заголовочном файле.

На чем я остановился?
#include <stdio.h>
#include <stdlib.h>
#define FILE_NAME "file.txt"
struct oxota
{
char prizvishe;
int vpol;
int vaga;};

void main ()
{
struct oxota data[100];
char line[100];
int v=0;
FILE*fp=fopen(FILE_NAME, "r");
while (fgets(line, sizeof(line), fp)!=NULL)
{
sscanf(line, "%s %i %i", &data[v].prizvishe, &data[v].vpol, &data[v].vaga);
printf("%s", line);
v++;
}
printf("\n");
}

Fata1ex
30.05.2009, 20:24
В каком виде строки в файле?

unfii
30.05.2009, 20:29
пример 2 записей
Babyrka 12 300
Pupkin 13 200

Fata1ex
30.05.2009, 21:06
// main.cpp

#include //
#include "readname.h"
#include "readmass.h"
#include "readcount.h"


const int N = 10;

int main () {
const char* name;
scanf_s("%s",&name);
FILE *f;
char* names;
int* mass;
int* count;
char buffer[256];

f=fopen(name, "r");

if (f) {
while (fgetc(f)!=EOF) {
for (int i=0; N; i++) {
fgets(buffer, 256, f);
readname(i, names, buffer);
readmass(i, mass, buffer);
readcount(i, count, buffer);
}
}
}
int maxcount=0;
int C=0;
int maxmass=0;
int m=0;

for (int i=0; N; i++) {
if (mass[i]>maxmass) {
maxmass=mass[i];
m=i; }
if (count[i]>maxcount) {
maxcount=count[i];
C=i; }
}


for (int i=0; N; i++) {
if (mass[i]=maxmass)
printf(" Максимальная масса %s", &name[m]);
if (count[i]=maxcount)
printf(" Максимальное количество %s", &name[C]);
}

return 0;
}


// readname.h

#include //


void readname(int i, char* names, char* buffer) {
char c;
while (1) {
sscanf_s(buffer, "%c", &c);
if (c==' ') break;
names[i]+=c;
}
}

// readcount.h

#include //

void readcount(int i, int* count, char* buffer) {
char c;
char* temp;
while (1) {
sscanf_s(buffer, "%c", &c);
if (c==' ') break;
temp+=c;
}

count[i]=atoi(temp);
}

// readmass.h

#include //

void readmass(int i, int* mass, char* buffer) {
char c;
char* temp;
while (1) {
sscanf_s(buffer, "%c", &c);
if (c==' ') break;
temp+=c;
}

mass[i]=atoi(temp);
}

unfii
30.05.2009, 21:14
а можно просто на C?а то преподы порешают :)

Ra$cal
31.05.2009, 00:54
я не пойму в чем сложность? ну считал ты всех охотников в массив. отправляй этот массив в функции, считающие лучшего охотника. там простой цикл.
в первой функции переменные типа

int cur_max_kills = 0;
int best_hunter_index = 0;
if(cur_max_kills < hunters[i].kills){
cur_max_kills = hunters[i].kills;
best_hunter_index = i;
}

эти функции, которые вычисляют лучших охотников, вообще мало чем привязаны к си \ с++, ибо не юзают никакие специфичные классы и функции. чистый самопал.

unfii
31.05.2009, 18:06
ошибка KRNL386.exe при запуске приложения

Ra$cal
31.05.2009, 18:23
борланд такой борланд.
на самом деле хз что значит эта ошибка, ибо борланд с++ никада не юзал.