powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите с лабораторной(найти ошибку)
16 сообщений из 16, страница 1 из 1
Помогите с лабораторной(найти ошибку)
    #34540822
Наталья_25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте УВАЖАЕМЫЕ ГУРУ!
Помогите с лабой
Вот задание:
1. Записать сведения о pезультатах соpевнований по пpыжкам в высоту (3 попытки).
Каждая запись должна содеpжать следующую инфоpмацию: ФИО споpтсмена,
споpтивное общество, pезультаты 3-х попыток. Количество споpтсменов -
пpоизвольное, ваpиант исходных данных выбpать самостоятельно.

2. Вывести на экран спортивое общество - победителя соpевнований.

3. Вывести на экран список участников соpевнований и
количество спортсменов заданного споpтивного общества .

У меня проблема с 3 пунктом(количество спортсменов заданного споpтивного общества)
все время выводит сообщение - "Нет такого спортивного общества!"

Помогите, пожалуйста найти ошибку

для краткости решение 2 пункта не привожу(он работает)


Код: plaintext
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.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
#include <iostream.h>
#include <fstream.h>
#include <string.h>     // strcmp()
#include <stdlib.h>     // exit()
#include <iomanip.h>    // setw()
#include <io.h>         // clrscr()
#include <conio.h> 
//------------------------------------------------------------------------------
#define FIO  20 
#define SO  20 
#define REZ1  10 
#define REZ2  10 
#define REZ3  10 
//------------------------------------------------------------------------------
 int sportsman ;
struct  SPORT
{
  char fio [FIO];         //  Ф.И.О. спортсмена 
  char so [SO];           //  Hаименование общества     
  char rez1 [REZ1] ;        //  Результат 1 попытки
  char rez2 [REZ2] ;       //  Результат 2 попытки
  char rez3 [REZ3] ;      //  Результат 3 попытки    
};

//------------------------------------------------------------------------------
// --------------Прототипы функций----------------------------------------------

void sozdanie();
void prosmotr();
//void vibor();                                      
void tabl(); 

//------------------------------------------------------------------------------
//-------------Опеpация-функция  ввода в стpуктуpу  с клавиатуpы----------------
istream &operator >> (istream &in, SPORT &x)
{
  int v; 
  cout << "\nФамилия и инициалы спортсмена: "; 
  in.seekg( 0 ,ios::end); 
  in.get(x.fio,FIO- 1 ,'\n'); 
  cout << "\nНаименование спортивного общества: "; 
  in.seekg( 0 ,ios::end); 
  in.get(x.so,SO- 1 ,'\n'); 
  cout<<"\nРезультат 1 попытки: "; 
  in.seekg( 0 ,ios::end); 
  in >> v; 
  itoa(v,x.rez1, 10 );   // Преобразование целого числа в строку 
  cout<<"\nРезультат 2 попытки: "; 
  in.seekg( 0 ,ios::end); 
  in >> v; 
  itoa(v,x.rez2, 10 );   // Преобразование целого числа в строку
  cout<<"\nРезультат 3 попытки: "; 
  in.seekg( 0 ,ios::end); 
  in >> v; 
  itoa(v,x.rez3, 10 );   // Преобразование целого числа в строку
return in; 
} 

//------------------------------------------------------------------------------
//-------------Опеpация-функция вывода стpуктуpы на дисплей---------------------

ostream &operator << (ostream &out, SPORT x) 
{
   out.setf(ios::left);         // установка флага равнения по левому краю
   out << "¦" << setw( 20 ) << x.fio << "¦" << setw( 22 ) 
      << x.so <<"¦\n";
   cout << "---------------------------------------------\n";
   return out; 
}

//------------------------------------------------------------------------------
//-----------------Опеpация-функция  записи в файл------------------------------

ofstream &operator << (ofstream &out, SPORT &x) 
{ 
   out << x.fio  << '\n' ; 
   out << x.so << '\n' ; 
   out << x.rez1  << '\n' ; 
   out << x.rez2  << '\n' ;
   out << x.rez3  << '\n' ; 
return out; 
}

//------------------------------------------------------------------------------
//------------Опеpация-функция  чтения из файла------------------------------

ifstream &operator >> (ifstream &in, SPORT &x)
{
   in.getline(x.fio,FIO,'\n'); 
   in.getline(x.so,SO,'\n'); 
   in.getline(x.rez1,REZ1,'\n'); 
   in.getline(x.rez2,REZ2,'\n'); 
   in.getline(x.rez3,REZ3,'\n');
return in; 
} 
 
//------------------------------------------------------------------------------
//---------- определение функции вывода на экран шапки таблицы
void tabl()
{
  cout <<"|====================|======================|\n";
  cout <<"| Ф.И.О. спортсмена  |  Спортивное общество |\n";
  cout <<"|====================|======================|\n";
} 

//------------------------------------------------------------------------------

void main() 
{ 
   char c; 
   textbackground(BLUE); 
   textcolor( 15 ); 
     
while ( 1 )
{
   clrscr();
   gotoxy( 15 , 7 );
   cout <<       " |===============================================|  \n";
   gotoxy( 15 , 8 );                                            
   cout <<       " |            ГЛАВНОЕ  МЕНЮ                      | \n";
   gotoxy( 15 , 9 );
   cout <<       " |                                               | \n";
   gotoxy( 15 , 10 );
   cout <<       " |  1. Создание файла данных о спортсменах       | \n";
   gotoxy( 15 , 11 );
   cout <<       " |  2. Вывод на экран победителя                 | \n";
   gotoxy( 15 , 12 );
   cout <<       " |  3. Вывод списка участников и количество      | \n";
   gotoxy( 15 , 13 );
   cout <<       " |     спортсменов заданного споpтивного общества| \n";
   gotoxy( 15 , 14 );
   cout <<       " |  4. Выход из программы                        | \n";
   gotoxy( 15 , 15 );
   cout <<       " |===============================================| \n";
   gotoxy( 15 , 167 );
   cout << "Ваш выбор -> "; 
   cin.seekg( 0 ,ios::end); 
   c = cin.get();                             
    
   switch(c)
   {                                                                                                           
      case '1':
      sozdanie();
        break;

      case '2':
      
        break;

      case '3':
      prosmotr();
        break;

      case '4':
        return;
  
   default: 
     cout << "Вводите только цифры от 1 до 4\n "; 
     cout << "Продолжение - клавиша Enter "; 
     cin.seekg( 0 ,ios::end); 
     cin.get(); 
     }
}
} 

//------------------------------------------------------------------------------

void sozdanie ()
{
   
   cout << "Введите количество спортсменов: "; //запрашиваем
   cin >> sportsman ;      //и принимаем количество спортсменов
   
   cout <<"Введите информацию о " << sportsman <<" спортсменах: \n" ;
   { 
   char c; 
   ofstream ff;    // создание потока ff для записи в файл
   SPORT s;   
   ff.open("sport.txt", ios::binary ); // открытие файла sport.txt и связывание его
	                             // c потоком ff
    if (!ff) 
    { 
    cerr << "Не удалось открыть файл sport.txt для записи\n"; 
      
    } 	                             
//--------------- Цикл записи элементов в файл	                             
   for ( int i= 0 ; i<sportsman; i++ ) 
  { 
    
    cin >> s;    // обращение к операции-функции ввода с клавиатуpы
    ff  << s;    // обращение к операции-функции записи в файл
  }
    ff.close();     // закpытие файла
    cout << "Нажмите клавишу Enter для выхода в главное меню " ;
    cin.seekg( 0 ,ios::end); 
    cin.get(c); 
}
}

//------------------------------------------------------------------------------

void prosmotr ()
{
char so[SO] ;
    int j=  0 ;
   ifstream finp;     // создание потока finp для чтения из файла
   SPORT s;
   finp.open( "sport.txt", ios::in );  // открытие файла sport.txt и связывание его
                                      // с потоком finp
   if (!finp) 
   { 
   cerr << "Не удалось открыть файл sport.txt для чтения\n"; 
     return ; 
   } 
     cout<<"Просмотр информации\n";
     tabl ();        // вывод на экран шапки таблицы
     while ( !finp.eof() )   // пока не конец файла 
     { 
       finp >> s ;      // чтение из файла 
       if ( strlen(s.fio) ==  0  ) 
         break; 
           cout << s;       // вывод на дисплей 
               }
   
    
  
    cout << "\nВведите название спортивного общества ";
    
    cin >> so ;
       finp >> s ;      // чтение из файла
       for ( int i= 0 ; i<sportsman; i++ )
        {
        
       if (strcmp(s.so , so) ==  0 )
       j++ ; 
          
    cout << j ;
          
      cin.sync();
         cin.get();
	  finp.close();      // закpытие файла 
             }}
cout << "Нет такого спортивного общества!" << endl;
  cin.sync();
  cin.get();
}                
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34540851
enkarito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может всё таки так:
Код: plaintext
1.
if(j ==  0 )
  cout << "Нет такого спортивного общества!" << endl;
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34540952
Наталья_25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
enkaritoА может всё таки так:
Код: plaintext
1.
if(j ==  0 )
  cout << "Нет такого спортивного общества!" << endl;



Поиск все равно не работает
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34540980
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваша процедура prosmotr не имеет логического завершения. После её выполнения в переменной j очевидно должен находится какой-то счетчик найденных записей. Верно? А вот что происходит дальше со счетчиком непонятно. Судя по исходнику, его значение просто выводится на экран. Однако, логичнее было-бы вывести на cout найденные записи.

Нечто вроде.

Код: plaintext
1.
2.
3.
4.
if (strcmp(s.so , so) ==  0 ){
       j++ ; 
       count << "Ура! Нашёл!";
}
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34540999
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВаша процедура prosmotr не имеет логического завершения. После её выполнения в переменной j очевидно должен находится какой-то счетчик найденных записей. Верно?Ой, ну что вы к этому несчастному счетчику прицепились? У Натальи ошибка в алгоритме. Она сначала выводит все записи из файла, потом спрашивает чего искать и пытается найти запрошеное читая из файла, но файл то уже кончился....
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34541006
Наталья_25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И как быть мне ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
cout << "\nВведите название спортивного общества ";
    
    cin >> so ;
       finp >> s ;      // чтение из файла
       for ( int i= 0 ; i<sportsman; i++ )
        {
        
       if (strcmp(s.so , so) ==  0 )
       j++ ; 
          
    cout << j ;
          
      cin.sync();
         cin.get();
	  finp.close();      // закpытие файла 
             }}
cout << "Нет такого спортивного общества!" << endl;
  cin.sync();
  cin.get();
}                

Насколько я поняла - ошибка в этом куске кода?
я удалила finp >> s ; // чтение из файла
результат тот же

надо полностью повторять как при выводе всех записей?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
char so[SO] ;
    int j=  0 ;
   ifstream finp;     // создание потока finp для чтения из файла
   SPORT s;
   finp.open( "sport.txt", ios::in );  // открытие файла sport.txt и связывание его
                                      // с потоком finp
   if (!finp) 
   { 
   cerr << "Не удалось открыть файл sport.txt для чтения\n"; 
     return ; 
   } 


и потом выполнять поиск?
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34541339
enkarito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, недоглядел...

Можно использовать seekg для возврата в начало файла.
А далее, как вариант( не проверял, может содержать ошибки)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    cout << "\nВведите название спортивного общества ";
    cin >> so ;
    finp.seekg( 0 ,ios_base::beg);
    while( !finp.feof() )
    {
    finp >> s ;      // чтение из файла    
    if (strcmp(s.so , so) ==  0 )    j++ ; 
    }          
    if ( j== 0  ) cout << "N=" << j << endl;
    else cout << "Нет такого спортивного общества!" << endl;
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34543977
Наталья_25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то у меня все равно не получается.....
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34544064
Наталья_25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переработала маленько программу(сделала поиск отдельной функцией)
На выходе все равно получается "0" спортсменов(((((((
Я так думаю, что теряется введенное количество спортсменов в начале программы....
и когда программа пробегается при поиске количества спортсменов заданного общества
она смотрит только одного спортмена....
Хотя может я и ошибаюсь.....
Подскажите, пожалуйста!!!!!

Код: plaintext
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.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
#include <iostream.h>
#include <fstream.h>
#include <string.h>     // strcmp()
#include <stdlib.h>     // exit()
#include <iomanip.h>    // setw()
#include <io.h>         // clrscr()
#include <conio.h> 
//------------------------------------------------------------------------------
#define FIO  20 
#define SO  20 
#define REZ1  10 
#define REZ2  10 
#define REZ3  10 
//------------------------------------------------------------------------------
int sportsman ;
struct  SPORT
{
  char fio [FIO];         //  Ф.И.О. спортсмена 
  char so [SO];           //  Hаименование общества     
  char rez1 [REZ1] ;        //  Результат 1 попытки
  char rez2 [REZ2] ;       //  Результат 2 попытки
  char rez3 [REZ3] ;      //  Результат 3 попытки    
};

//------------------------------------------------------------------------------
// --------------Прототипы функций----------------------------------------------

void sozdanie();
void prosmotr_full();
void prosmotr_kol();
//void vibor();                                      
void tabl(); 

//------------------------------------------------------------------------------
//-------------Опеpация-функция  ввода в стpуктуpу  с клавиатуpы----------------
istream &operator >> (istream &in, SPORT &x)
{
  int v; 
  cout << "\nФамилия и инициалы спортсмена: "; 
  in.seekg( 0 ,ios::end); 
  in.get(x.fio,FIO- 1 ,'\n'); 
  cout << "\nНаименование спортивного общества: "; 
  in.seekg( 0 ,ios::end); 
  in.get(x.so,SO- 1 ,'\n'); 
  cout<<"\nРезультат 1 попытки: "; 
  in.seekg( 0 ,ios::end); 
  in >> v; 
  itoa(v,x.rez1, 10 );   // Преобразование целого числа в строку 
  cout<<"\nРезультат 2 попытки: "; 
  in.seekg( 0 ,ios::end); 
  in >> v; 
  itoa(v,x.rez2, 10 );   // Преобразование целого числа в строку
  cout<<"\nРезультат 3 попытки: "; 
  in.seekg( 0 ,ios::end); 
  in >> v; 
  itoa(v,x.rez3, 10 );   // Преобразование целого числа в строку
return in; 
} 

//------------------------------------------------------------------------------
//-------------Опеpация-функция вывода стpуктуpы на дисплей---------------------

ostream &operator << (ostream &out, SPORT x) 
{
   out.setf(ios::left);         // установка флага равнения по левому краю
   out << "¦" << setw( 20 ) << x.fio << "¦" << setw( 22 ) 
      << x.so <<"¦\n";
   cout << "---------------------------------------------\n";
   return out; 
}

//------------------------------------------------------------------------------
//-----------------Опеpация-функция  записи в файл------------------------------

ofstream &operator << (ofstream &out, SPORT &x) 
{ 
   out << x.fio  << '\n' ; 
   out << x.so << '\n' ; 
   out << x.rez1  << '\n' ; 
   out << x.rez2  << '\n' ;
   out << x.rez3  << '\n' ; 
return out; 
}

//------------------------------------------------------------------------------
//------------Опеpация-функция  чтения из файла------------------------------

ifstream &operator >> (ifstream &in, SPORT &x)
{
   in.getline(x.fio,FIO,'\n'); 
   in.getline(x.so,SO,'\n'); 
   in.getline(x.rez1,REZ1,'\n'); 
   in.getline(x.rez2,REZ2,'\n'); 
   in.getline(x.rez3,REZ3,'\n');
return in; 
} 

//------------------------------------------------------------------------------

void main() 
{ 
   char c; 
   textbackground(BLUE); 
   textcolor( 15 ); 
     
while ( 1 )
{
   clrscr();
   gotoxy( 15 , 7 );
   cout <<       " |=================================================|  \n";
   gotoxy( 15 , 8 );                                            
   cout <<       " |            ГЛАВНОЕ  МЕНЮ                        | \n";
   gotoxy( 15 , 9 );
   cout <<       " |                                                 | \n";
   gotoxy( 15 , 10 );
   cout <<       " |  1. Создание файла данных о спортсменах         | \n";
   gotoxy( 15 , 11 );
   cout <<       " |  2. Вывод на экран победителя                   | \n";
   gotoxy( 15 , 12 );
   cout <<       " |  3. Вывод списка участников                     | \n";
   gotoxy( 15 , 13 );
   cout <<       " |  4. Количество спортсменов в споpтивном обществе| \n";
   gotoxy( 15 , 14 );
   cout <<       " |  5. Выход из программы                          | \n";
   gotoxy( 15 , 15 );
   cout <<       " |=================================================| \n";
   gotoxy( 15 , 167 );
   cout << "Ваш выбор -> "; 
   cin.seekg( 0 ,ios::end); 
   c = cin.get();                             
    
   switch(c)
   {                                                                                                           
      case '1':
      sozdanie();
        break;

      case '2':
      
        break;

      case '3':
      prosmotr_full();
        break;
        
      case '4':
      prosmotr_kol();
        break;  

      case '5':
        return;
  
   default: 
     cout << "Вводите только цифры от 1 до 4\n "; 
     cout << "Продолжение - клавиша Enter "; 
     cin.seekg( 0 ,ios::end); 
     cin.get(); 
     }
}
} 

//------------------------------------------------------------------------------

void sozdanie ()
{
   
   cout << "Введите количество спортсменов: "; //запрашиваем
   cin >> sportsman ;      //и принимаем количество спортсменов
   
   cout <<"Введите информацию о " << sportsman <<" спортсменах: \n" ;
   { 
   char c; 
   ofstream ff;    // создание потока ff для записи в файл
   SPORT s;   
   ff.open("sport.txt", ios::binary ); // открытие файла sport.txt и связывание его
	                             // c потоком ff
    if (!ff) 
    { 
    cerr << "Не удалось открыть файл sport.txt для записи\n"; 
      
    } 	                             
//--------------- Цикл записи элементов в файл	                             
   for ( int i= 0 ; i<sportsman; i++ ) 
  { 
    
    cin >> s;    // обращение к операции-функции ввода с клавиатуpы
    ff  << s;    // обращение к операции-функции записи в файл
  }
    ff.close();     // закpытие файла
    cout << "Нажмите клавишу Enter для выхода в главное меню " ;
    cin.seekg( 0 ,ios::end); 
    cin.get(c); 
}
}

//------------------------------------------------------------------------------

void prosmotr_full ()
{
char so[SO] ;
    
   ifstream finp;     // создание потока finp для чтения из файла
   SPORT s;
   finp.open( "sport.txt", ios::in );  // открытие файла sport.txt и связывание его
                                      // с потоком finp
   if (!finp) 
   { 
   cerr << "Не удалось открыть файл sport.txt для чтения\n"; 
     return ; 
   } 
     cout<<"Просмотр информации\n";
     tabl ();        // вывод на экран шапки таблицы
     while ( !finp.eof() )   // пока не конец файла 
     { 
       finp >> s ;      // чтение из файла 
       if ( strlen(s.fio) ==  0  ) 
         break; 
           cout << s;         // вывод на дисплей
	   }
	   finp.close();      // закpытие файла                                                  
    cout << "\nПродолжение - клавиша Enter ";  
    cin.seekg( 0 ,ios::end); 
    cin.get();
   }
               
             
               
//------------------------------------------------------------------------------

//---------- определение функции вывода на экран шапки таблицы -----------------
void tabl()
{
  cout <<"|====================|======================|\n";
  cout <<"| Ф.И.О. спортсмена  |  Спортивное общество |\n";
  cout <<"|====================|======================|\n";
} 

//------------------------------------------------------------------------------
              
void prosmotr_kol ()
{
char so[SO] ;
   int j=  0 ;
   cout << "\nВведите название спортивного общества: " ;  
   cin >> so ;
   cout<<"\nВывод информации о количестве спортсменов \n";
   
   ifstream finp;     // создание потока finp для чтения из файла
   SPORT s;
   finp.open( "sport.txt", ios::in );  // открытие файла sport.txt и связывание его
                                      // с потоком finp
   if (!finp) 
   { 
   cerr << "Не удалось открыть файл sport.txt для чтения\n"; 
     return ; 
   }                           
  
   for( int i= 0 ; i<sportsman; i++ )
     {
       if (strcmp(s.so , so) ==  0 )
       j++ ; 
     }  
    cout<<"в спортивном обществе " <<so<<" :\n";
    cout << j << " спортсменов" ;
             
             finp.close();      // закpытие файла                                                  
    cout << "\nПродолжение - клавиша Enter ";  
    cin.seekg( 0 ,ios::end); 
    cin.get();
   }

...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34544076
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья_25Я так думаю, что теряется введенное количество спортсменов в начале программы....А ты его не храни. Вообще не храни.
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34544081
Наталья_25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть не хранить?
а как тогда пробегаться по спортсменам?

Код: plaintext
1.
for( int i= 0 ; i<sportsman; i++ )
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34544302
enkarito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Построчно читая файл - прочитаешь данные о всех спортсменах.
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34546919
Наталья_25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну помогите кто нибудь!!!!
мне в пятницу уже сдавать надо....
напишите пару строчек кода, пожалуйста!
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34546955
enkarito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нормально срабатывает функция prosmotr_full()
Код: plaintext
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.
void prosmotr_full ()
{
char so[SO] ;
    
   ifstream finp;     // создание потока finp для чтения из файла
   SPORT s;
   finp.open( "sport.txt", ios::in );  // открытие файла sport.txt и связывание его
                                      // с потоком finp
   if (!finp) 
   { 
   cerr << "Не удалось открыть файл sport.txt для чтения\n"; 
     return ; 
   } 
     cout<<"Просмотр информации\n";
     tabl ();        // вывод на экран шапки таблицы
     while ( !finp.eof() )   // пока не конец файла 
     { 
       finp >> s ;      // чтение из файла 
       if ( strlen(s.fio) ==  0  ) 
         break; 
           cout << s;         // вывод на дисплей
	   }
	   finp.close();      // закpытие файла                                                  
    cout << "\nПродолжение - клавиша Enter ";  
    cin.seekg( 0 ,ios::end); 
    cin.get();
   }
то можно предположить, что сработает следующий вариант функции prosmotr_kol()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
void prosmotr_kol ()
{
   char so[SO] ;    
   ifstream finp;     // создание потока finp для чтения из файла
   SPORT s;
   int j= 0 ;
   finp.open( "sport.txt", ios::in );  // открытие файла sport.txt и связывание его
                                      // с потоком finp
   if (!finp) 
   { 
     cerr << "Не удалось открыть файл sport.txt для чтения\n"; 
     return ; 
   } 
    cout << "\nВведите название спортивного общества ";    
    cin >> so ;
    while ( !finp.eof() )   // пока не конец файла 
    { 
       finp >> s ;      // чтение из файла 
       if(strcmp(s.so,so) ==  0 ) j++;
    }
    finp.close();      // закpытие файла                                                  
    cout << "Найдено " << j << " спортсменов" << endl;
   }
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34547229
Наталья_25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все работает!
Огромное спасибо!!!!
Только я не поняла в чем моя ошибка?
я вроде примерно так же писала код....
enkarito
Спасибо!
...
Рейтинг: 0 / 0
Помогите с лабораторной(найти ошибку)
    #34547633
enkarito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш цикл:
Код: plaintext
1.
2.
3.
4.
   for( int i= 0 ; i<sportsman; i++ )
     {
       if (strcmp(s.so , so) ==  0 )
       j++ ; 
     }  
в нем нет чтения из файла, а значит переменная s содержит последнее значение из файла и Вы sportsman раз проверяли so с одним и тем же значением s.so

Измененный цикл:
Код: plaintext
1.
2.
3.
4.
    while ( !finp.eof() )   // пока не конец файла 
    { 
       finp >> s ;      // чтение из файла 
       if(strcmp(s.so,so) ==  0 ) j++;
    }
перебор разных сообществ осуществляется через чтение из файла. while() выполняет ту же цель что и for(), только более надежен.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите с лабораторной(найти ошибку)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]