Форум программистов, компьютерный форум CyberForum.ru

Структуры [C++] - C++

Восстановить пароль Регистрация
 
druger
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 57
04.03.2012, 15:11     Структуры [C++] #1
Почему новый файл пуст? Что у меня не так?
Вот код, прога без ошибок, всё компилится
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include<iomanip.h>         
#include<fstream.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
 
ifstream Fin;
ofstream Fout;
const int m=6;
struct Sportsmen
 {
  char Fam[11];
  char Dolgn[14];
  float Ball[m];
 };
void input (Sportsmen &T)
 {
  Fin>>T.Fam>>T.Dolgn;
  for (int j=0; j<m; j++)
   Fin>>T.Ball[j];
 }
void output (Sportsmen T)
 {
  Fout<<setw(10)<<T.Fam<<" "<<setw(15)<<T.Dolgn;
  for (int j=0; j<m; j++)
   Fout<<setw(4)<<T.Ball[j];
   Fout<<endl;
 }
 float SrBall (Sportsmen T)
  {
   float Sr=0;
   for (int j=0; j<m; j++)
   Sr+=T.Ball[j];
   return Sr/m;
  }
 
void main ()
 {
  int F=1;
  Sportsmen S;
  Fin.open("D:\STRUCT\DATASPORTS.cpp");
  if (Fin.fail())
   {
   cout<< "\n input file is not open \n";
   exit(1);
   }
  Fout.open("D:\STRUCT\BALL.cpp");
  if (Fout.fail())
   {
    cout <<"\n created file is not open\n";
    exit(1);
   }
float   max=0;
   input (S);
   while (!Fin.eof())
    {
     if (SrBall(S)>max)
      max=SrBall(S);
      input(S);
    }
  Fin.close();
  Fin.open("D:\STRUCT\DATASPORTS.cpp");
  input(S);
  while (!Fin.eof())
   {
    if (SrBall(S)==max)
    output(S);
    input(S);
   }
  Fout.close();
  if (F==1)
   cout<<"file empty";
    else cout<<"okay";
  getch();
 }
Вот исходный файл DATASPORTS
Код
Ololoev swimer 20 15 18 19.5 17 20
Troler troling 20 20 20 20 20 20
Djigurda sport_dancer 15 14 10 5 7 3.5
Mentov footballer 5.5 4 2 1 1 1
Ravshan skier 3 8 6 12 16 14
Djamshut bobsledder 3 3 1 2 2.5 1.5
Putin karatist 19 20 19 13 9 8
Mevdedev judoist 18.5 17.5 19.5 11 4 20
Makarov athlete 13 15 11.5 14.5 9 18
Syvorov biathlete 7 0 3 9 8 2
И условие задачи: Дан типизированный файл структур типа Sportsmen, содержащий следующие поля: Fam-фамилия, Dolgn-занимаемая должность, Ball-массив баллов, поставленных m судьями. Вывести в новый типизированный файл инфу о спортсменах с максимальным средним баллом
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2012, 15:11     Структуры [C++]
Посмотрите здесь:

Структуры C++
C++ 2 структуры
Структуры C++
C++ структуры
Структуры C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
04.03.2012, 15:48     Структуры [C++] #2
экранируйте слэши в пути файлов
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
04.03.2012, 15:51     Структуры [C++] #3
А лучше всегда использовать прямые слеши
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
04.03.2012, 15:54     Структуры [C++] #4
правильные слеши не помогли. почему-то читает лишь одну структуру после закрытия и повторного открытия файла. помогла вставка Fin.clear() между 61 и 62 строкой.
т.к. F в программе не изменяется, всегда будет выводится empty file, хотя это не так.
А вообще общий подход кривой. зачем два раза читать из файла. можно в массив все считать, найти в этом массиве нужных спортсменов и слить их в другой файл.

C++
1
2
3
4
5
6
7
  input(S);
  while (!Fin.eof())
   {
    if (SrBall(S)==max)
    output(S);
    input(S);
   }
если в файле одна запись, то обработка считанной структуры не будет производится. тут нужен do {} while (!eof)
druger
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 57
09.03.2012, 19:53  [ТС]     Структуры [C++] #5
DU, Fin.clear(); и do while не помогли. Файл всё по-прежнему пуст
Кто-нибудь знает, что ещё можно исправить?
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,181
Завершенные тесты: 1
09.03.2012, 20:43     Структуры [C++] #6
Вместо того, чтобы закрывать и снова открывать файл (строки 61-62),
переместите указатель на начало командой:
Fin.seekg(0, ios_base::beg);
Yandex
Объявления
09.03.2012, 20:43     Структуры [C++]
Ответ Создать тему
Опции темы

Текущее время: 18:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru